[ { "inputs": [ { "internalType": "uint256", "name": "_operatorFeePercentage", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "articleId", "type": "uint256" }, { "indexed": false, "internalType": "string", "name": "name", "type": "string" }, { "indexed": false, "internalType": "address", "name": "business", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "price", "type": "uint256" } ], "name": "ArticleCreated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "articleId", "type": "uint256" } ], "name": "ArticleDeleted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "articleId", "type": "uint256" }, { "indexed": false, "internalType": "string", "name": "name", "type": "string" }, { "indexed": false, "internalType": "address", "name": "business", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "price", "type": "uint256" } ], "name": "ArticleUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "bookingId", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "customer", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "totalAmount", "type": "uint256" } ], "name": "BookingCreated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "bookingId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "BookingPaid", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "bookingId", "type": "uint256" } ], "name": "PaymentCompleted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "bookingId", "type": "uint256" } ], "name": "PaymentRefunded", "type": "event" }, { "inputs": [], "name": "DISPUTE_PERIOD", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "articleCounter", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "articles", "outputs": [ { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "address", "name": "business", "type": "address" }, { "internalType": "uint256", "name": "price", "type": "uint256" }, { "internalType": "bool", "name": "isActive", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "bookingArticles", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "bookingCounter", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "bookings", "outputs": [ { "internalType": "uint256", "name": "totalAmount", "type": "uint256" }, { "internalType": "uint256", "name": "operatorFee", "type": "uint256" }, { "internalType": "uint256", "name": "timestamp", "type": "uint256" }, { "internalType": "address", "name": "customer", "type": "address" }, { "internalType": "address", "name": "payer", "type": "address" }, { "internalType": "bool", "name": "isPaid", "type": "bool" }, { "internalType": "bool", "name": "isCompleted", "type": "bool" }, { "internalType": "bool", "name": "isRefunded", "type": "bool" }, { "internalType": "uint256", "name": "articleCount", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256[]", "name": "_articleIds", "type": "uint256[]" } ], "name": "calculateTotalAmount", "outputs": [ { "internalType": "uint256", "name": "totalAmount", "type": "uint256" }, { "internalType": "uint256", "name": "operatorFee", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_bookingId", "type": "uint256" } ], "name": "completePayment", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "_name", "type": "string" }, { "internalType": "address", "name": "_business", "type": "address" }, { "internalType": "uint256", "name": "_price", "type": "uint256" } ], "name": "createArticle", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256[]", "name": "_articleIds", "type": "uint256[]" }, { "internalType": "address", "name": "_customer", "type": "address" } ], "name": "createBooking", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_articleId", "type": "uint256" } ], "name": "deleteArticle", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "getAllArticles", "outputs": [ { "internalType": "uint256[]", "name": "", "type": "uint256[]" }, { "internalType": "string[]", "name": "", "type": "string[]" }, { "internalType": "address[]", "name": "", "type": "address[]" }, { "internalType": "uint256[]", "name": "", "type": "uint256[]" }, { "internalType": "bool[]", "name": "", "type": "bool[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getAllBookings", "outputs": [ { "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "amounts", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "timestamps", "type": "uint256[]" }, { "internalType": "address[]", "name": "customers", "type": "address[]" }, { "internalType": "address[]", "name": "payers", "type": "address[]" }, { "internalType": "bool[]", "name": "paidStatus", "type": "bool[]" }, { "internalType": "bool[]", "name": "completedStatus", "type": "bool[]" }, { "internalType": "bool[]", "name": "refundedStatus", "type": "bool[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_articleId", "type": "uint256" } ], "name": "getArticle", "outputs": [ { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "address", "name": "business", "type": "address" }, { "internalType": "uint256", "name": "price", "type": "uint256" }, { "internalType": "bool", "name": "isActive", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_bookingId", "type": "uint256" } ], "name": "getBookingArticles", "outputs": [ { "components": [ { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "address", "name": "business", "type": "address" }, { "internalType": "uint256", "name": "price", "type": "uint256" }, { "internalType": "bool", "name": "isActive", "type": "bool" } ], "internalType": "struct TourismPayments.ArticleInfo[]", "name": "articleInfos", "type": "tuple[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "operator", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "operatorFeePercentage", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_bookingId", "type": "uint256" } ], "name": "payBooking", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_bookingId", "type": "uint256" } ], "name": "refundPayment", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_articleId", "type": "uint256" }, { "internalType": "string", "name": "_name", "type": "string" }, { "internalType": "address", "name": "_business", "type": "address" }, { "internalType": "uint256", "name": "_price", "type": "uint256" } ], "name": "updateArticle", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ] 60806040523480156200001157600080fd5b50604051620037d3380380620037d383398181016040528101906200003791906200009c565b336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060018190555050620000ec565b6000815190506200009681620000d2565b92915050565b600060208284031215620000af57600080fd5b6000620000bf8482850162000085565b91505092915050565b6000819050919050565b620000dd81620000c8565b8114620000e957600080fd5b50565b6136d780620000fc6000396000f3fe60806040526004361061011f5760003560e01c806385892266116100a0578063b44d310b11610064578063b44d310b14610410578063bd85d8671461043f578063d287ac421461047f578063edcfafe6146104aa578063f63813f4146104ea5761011f565b80638589226614610338578063a5bbe22b14610354578063aa42539a1461037f578063ab3ac785146103bc578063b2df2398146103e55761011f565b80634f01c6f2116100e75780634f01c6f21461022c578063570ca735146102555780635ea3ab85146102805780637aa80af2146102be578063842be18b146102fb5761011f565b80630953ae17146101245780631dab301e1461014f5780633774a0cb146101945780634245f2fe146101d1578063498de8b314610203575b600080fd5b34801561013057600080fd5b50610139610513565b60405161014691906130e4565b60405180910390f35b34801561015b57600080fd5b506101766004803603810190610171919061276e565b610519565b60405161018b99989796959493929190613128565b60405180910390f35b3480156101a057600080fd5b506101bb60048036038101906101b69190612707565b6105ce565b6040516101c891906130e4565b60405180910390f35b3480156101dd57600080fd5b506101e6610722565b6040516101fa989796959493929190612ea4565b60405180910390f35b34801561020f57600080fd5b5061022a6004803603810190610225919061276e565b610e2a565b005b34801561023857600080fd5b50610253600480360381019061024e919061276e565b610eec565b005b34801561026157600080fd5b5061026a61114e565b6040516102779190612df1565b60405180910390f35b34801561028c57600080fd5b506102a760048036038101906102a29190612672565b611172565b6040516102b59291906130ff565b60405180910390f35b3480156102ca57600080fd5b506102e560048036038101906102e091906126b3565b6112cc565b6040516102f291906130e4565b60405180910390f35b34801561030757600080fd5b50610322600480360381019061031d9190612812565b611634565b60405161032f91906130e4565b60405180910390f35b610352600480360381019061034d919061276e565b611659565b005b34801561036057600080fd5b506103696117ad565b60405161037691906130e4565b60405180910390f35b34801561038b57600080fd5b506103a660048036038101906103a1919061276e565b6117b4565b6040516103b39190612e0c565b60405180910390f35b3480156103c857600080fd5b506103e360048036038101906103de9190612797565b6119fa565b005b3480156103f157600080fd5b506103fa611b1c565b60405161040791906130e4565b60405180910390f35b34801561041c57600080fd5b50610425611b22565b604051610436959493929190612e2e565b60405180910390f35b34801561044b57600080fd5b506104666004803603810190610461919061276e565b612022565b6040516104769493929190612f98565b60405180910390f35b34801561048b57600080fd5b5061049461211b565b6040516104a191906130e4565b60405180910390f35b3480156104b657600080fd5b506104d160048036038101906104cc919061276e565b612121565b6040516104e19493929190612f98565b60405180910390f35b3480156104f657600080fd5b50610511600480360381019061050c919061276e565b612206565b005b60035481565b60046020528060005260406000206000915090508060000154908060010154908060020154908060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060040160149054906101000a900460ff16908060040160159054906101000a900460ff16908060040160169054906101000a900460ff16908060050154905089565b600080600360008154809291906105e49061355d565b91905055905060405180608001604052808681526020018573ffffffffffffffffffffffffffffffffffffffff168152602001670de0b6b3a76400008561062b9190613413565b815260200160011515815250600660008381526020019081526020016000206000820151816000019080519060200190610666929190612467565b5060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040820151816002015560608201518160030160006101000a81548160ff021916908315150217905550905050807f7d947412b2e027bd98da1e8b47e87b80aa0e8a6f0549b5eda4ca32310012253886868660405161070f93929190612f5a565b60405180910390a2809150509392505050565b60608060608060608060608060025467ffffffffffffffff811115610770577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405190808252806020026020018201604052801561079e5781602001602082028036833780820191505090505b50975060025467ffffffffffffffff8111156107e3577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156108115781602001602082028036833780820191505090505b50965060025467ffffffffffffffff811115610856577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156108845781602001602082028036833780820191505090505b50955060025467ffffffffffffffff8111156108c9577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156108f75781602001602082028036833780820191505090505b50945060025467ffffffffffffffff81111561093c577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405190808252806020026020018201604052801561096a5781602001602082028036833780820191505090505b50935060025467ffffffffffffffff8111156109af577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156109dd5781602001602082028036833780820191505090505b50925060025467ffffffffffffffff811115610a22577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610a505781602001602082028036833780820191505090505b50915060025467ffffffffffffffff811115610a95577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610ac35781602001602082028036833780820191505090505b50905060005b600254811015610e1f576000600460008381526020019081526020016000209050818a8381518110610b24577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250508060000154898381518110610b6e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250508060020154888381518110610bb8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250508060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16878381518110610c22577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16868381518110610cba577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508060040160149054906101000a900460ff16858381518110610d3f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010190151590811515815250508060040160159054906101000a900460ff16848381518110610d9c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010190151590811515815250508060040160169054906101000a900460ff16838381518110610df9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019015159081151581525050508080610e179061355d565b915050610ac9565b509091929394959697565b6006600082815260200190815260200160002060030160009054906101000a900460ff16610e8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8490613004565b60405180910390fd5b60006006600083815260200190815260200160002060030160006101000a81548160ff021916908315150217905550807f952950ab607c4a7f87f6a9b15935047221e6d7375af7861f5762eafbbdcbd9ae60405160405180910390a250565b60006004600083815260200190815260200160002090508060040160149054906101000a900460ff16610f54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4b906130a4565b60405180910390fd5b8060040160159054906101000a900460ff16158015610f8257508060040160169054906101000a900460ff16155b610fc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb890613084565b60405180910390fd5b60018160040160156101000a81548160ff02191690831515021790555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc82600101549081150290604051600060405180830381858888f19350505050158015611048573d6000803e3d6000fd5b5060005b816005015481101561111c57600060056000858152602001908152602001600020600083815260200190815260200160002054905060006006600083815260200190815260200160002090508060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc82600201549081150290604051600060405180830381858888f19350505050158015611106573d6000803e3d6000fd5b50505080806111149061355d565b91505061104c565b50817f6bef1b5e95b741d6e665eb9b5c2d3e1203c46a771451055a9d41e0b8ff4510b760405160405180910390a25050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060005b835181101561129b57600660008583815181106111be577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151815260200190815260200160002060030160009054906101000a900460ff16611224576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121b90613004565b60405180910390fd5b60066000858381518110611261577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015181526020019081526020016000206002015483611286919061338c565b925080806112939061355d565b915050611178565b50612710600154836112ad9190613413565b6112b791906133e2565b905080826112c5919061338c565b9150915091565b600080835111611311576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611308906130c4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611381576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137890612fe4565b60405180910390fd5b60008061138d85611172565b915091506000600260008154809291906113a69061355d565b9190505590506040518061012001604052808481526020018381526020014281526020018673ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160001515815260200160001515815260200160001515815260200187518152506004600083815260200190815260200160002060008201518160000155602082015181600101556040820151816002015560608201518160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060808201518160040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060a08201518160040160146101000a81548160ff02191690831515021790555060c08201518160040160156101000a81548160ff02191690831515021790555060e08201518160040160166101000a81548160ff021916908315150217905550610100820151816005015590505060005b86518110156115d857868181518110611595577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516005600084815260200190815260200160002060008381526020019081526020016000208190555080806115d09061355d565b915050611553565b508473ffffffffffffffffffffffffffffffffffffffff16817f0303b7d3e01f9add26263f7746cf07cc567c8711ba4d0dcb43d346deb7fbd9908560405161162091906130e4565b60405180910390a380935050505092915050565b6005602052816000526040600020602052806000526040600020600091509150505481565b60006004600083815260200190815260200160002090508060040160149054906101000a900460ff16156116c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b990613044565b60405180910390fd5b80600001543414611708576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ff90613024565b60405180910390fd5b60018160040160146101000a81548160ff021916908315150217905550428160020181905550338160040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550817f7fe0f2451d656c771dcb9bb8cec3e368d133666dc25f03a0d78123933125c25a346040516117a191906130e4565b60405180910390a25050565b6202a30081565b60606000600460008481526020019081526020016000209050806005015467ffffffffffffffff811115611811577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405190808252806020026020018201604052801561184a57816020015b6118376124ed565b81526020019060019003908161182f5790505b50915060005b81600501548110156119f3576000600560008681526020019081526020016000206000838152602001908152602001600020549050600060066000838152602001908152602001600020905060405180608001604052808260000180546118b69061352b565b80601f01602080910402602001604051908101604052809291908181526020018280546118e29061352b565b801561192f5780601f106119045761010080835404028352916020019161192f565b820191906000526020600020905b81548152906001019060200180831161191257829003601f168201915b505050505081526020018260010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001826002015481526020018260030160009054906101000a900460ff1615158152508584815181106119d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181905250505080806119eb9061355d565b915050611850565b5050919050565b6006600085815260200190815260200160002060030160009054906101000a900460ff16611a5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5490613004565b60405180910390fd5b600060066000868152602001908152602001600020905083816000019080519060200190611a8c929190612467565b50828160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818160020181905550847fe8d63f0c3ae29a1a3d3b306affaea1d0ee7ebe03d28b236e445c18d386d284ba858585604051611b0d93929190612f5a565b60405180910390a25050505050565b60015481565b6060806060806060600060035467ffffffffffffffff811115611b6e577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015611b9c5781602001602082028036833780820191505090505b509050600060035467ffffffffffffffff811115611be3577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015611c1657816020015b6060815260200190600190039081611c015790505b509050600060035467ffffffffffffffff811115611c5d577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015611c8b5781602001602082028036833780820191505090505b509050600060035467ffffffffffffffff811115611cd2577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015611d005781602001602082028036833780820191505090505b509050600060035467ffffffffffffffff811115611d47577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015611d755781602001602082028036833780820191505090505b50905060005b60035481101561200657600060066000838152602001908152602001600020905081878381518110611dd6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001018181525050806000018054611df19061352b565b80601f0160208091040260200160405190810160405280929190818152602001828054611e1d9061352b565b8015611e6a5780601f10611e3f57610100808354040283529160200191611e6a565b820191906000526020600020905b815481529060010190602001808311611e4d57829003601f168201915b5050505050868381518110611ea8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101819052508060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16858381518110611f11577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508060020154848381518110611f89577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250508060030160009054906101000a900460ff16838381518110611fe0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019015159081151581525050508080611ffe9061355d565b915050611d7b565b5084848484849950995099509950995050505050509091929394565b6060600080600080600660008781526020019081526020016000209050806000018160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682600201548360030160009054906101000a900460ff1683805461208b9061352b565b80601f01602080910402602001604051908101604052809291908181526020018280546120b79061352b565b80156121045780601f106120d957610100808354040283529160200191612104565b820191906000526020600020905b8154815290600101906020018083116120e757829003601f168201915b505050505093509450945094509450509193509193565b60025481565b60066020528060005260406000206000915090508060000180546121449061352b565b80601f01602080910402602001604051908101604052809291908181526020018280546121709061352b565b80156121bd5780601f10612192576101008083540402835291602001916121bd565b820191906000526020600020905b8154815290600101906020018083116121a057829003601f168201915b5050505050908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020154908060030160009054906101000a900460ff16905084565b60006004600083815260200190815260200160002090508060040160149054906101000a900460ff1661226e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612265906130a4565b60405180910390fd5b8060040160159054906101000a900460ff1615801561229c57508060040160169054906101000a900460ff16155b6122db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d290613084565b60405180910390fd5b6202a30081600201546122ee919061338c565b421115612330576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232790613064565b60405180910390fd5b60018160040160166101000a81548160ff02191690831515021790555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc82600101549081150290604051600060405180830381858888f193505050501580156123b7573d6000803e3d6000fd5b508060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8260010154836000015461240a919061346d565b9081150290604051600060405180830381858888f19350505050158015612435573d6000803e3d6000fd5b50817fc12258dbc8f5aaf21f9b7ef40fbfb87befc7c46ac42dccc2c5cc565347e56ee660405160405180910390a25050565b8280546124739061352b565b90600052602060002090601f01602090048101928261249557600085556124dc565b82601f106124ae57805160ff19168380011785556124dc565b828001600101855582156124dc579182015b828111156124db5782518255916020019190600101906124c0565b5b5090506124e9919061252d565b5090565b604051806080016040528060608152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600081526020016000151581525090565b5b8082111561254657600081600090555060010161252e565b5090565b600061255d612558846131e6565b6131b5565b9050808382526020820190508285602086028201111561257c57600080fd5b60005b858110156125ac5781612592888261265d565b84526020840193506020830192505060018101905061257f565b5050509392505050565b60006125c96125c484613212565b6131b5565b9050828152602081018484840111156125e157600080fd5b6125ec8482856134e9565b509392505050565b60008135905061260381613673565b92915050565b600082601f83011261261a57600080fd5b813561262a84826020860161254a565b91505092915050565b600082601f83011261264457600080fd5b81356126548482602086016125b6565b91505092915050565b60008135905061266c8161368a565b92915050565b60006020828403121561268457600080fd5b600082013567ffffffffffffffff81111561269e57600080fd5b6126aa84828501612609565b91505092915050565b600080604083850312156126c657600080fd5b600083013567ffffffffffffffff8111156126e057600080fd5b6126ec85828601612609565b92505060206126fd858286016125f4565b9150509250929050565b60008060006060848603121561271c57600080fd5b600084013567ffffffffffffffff81111561273657600080fd5b61274286828701612633565b9350506020612753868287016125f4565b92505060406127648682870161265d565b9150509250925092565b60006020828403121561278057600080fd5b600061278e8482850161265d565b91505092915050565b600080600080608085870312156127ad57600080fd5b60006127bb8782880161265d565b945050602085013567ffffffffffffffff8111156127d857600080fd5b6127e487828801612633565b93505060406127f5878288016125f4565b92505060606128068782880161265d565b91505092959194509250565b6000806040838503121561282557600080fd5b60006128338582860161265d565b92505060206128448582860161265d565b9150509250929050565b600061285a83836128be565b60208301905092915050565b60006128728383612ae0565b60208301905092915050565b600061288a8383612afe565b905092915050565b600061289e8383612d70565b905092915050565b60006128b28383612dd3565b60208301905092915050565b6128c7816134a1565b82525050565b6128d6816134a1565b82525050565b60006128e782613292565b6128f18185613315565b93506128fc83613242565b8060005b8381101561292d578151612914888261284e565b975061291f836132d4565b925050600181019050612900565b5085935050505092915050565b60006129458261329d565b61294f8185613326565b935061295a83613252565b8060005b8381101561298b5781516129728882612866565b975061297d836132e1565b92505060018101905061295e565b5085935050505092915050565b60006129a3826132a8565b6129ad8185613337565b9350836020820285016129bf85613262565b8060005b858110156129fb57848403895281516129dc858261287e565b94506129e7836132ee565b925060208a019950506001810190506129c3565b50829750879550505050505092915050565b6000612a18826132b3565b612a228185613348565b935083602082028501612a3485613272565b8060005b85811015612a705784840389528151612a518582612892565b9450612a5c836132fb565b925060208a01995050600181019050612a38565b50829750879550505050505092915050565b6000612a8d826132be565b612a978185613359565b9350612aa283613282565b8060005b83811015612ad3578151612aba88826128a6565b9750612ac583613308565b925050600181019050612aa6565b5085935050505092915050565b612ae9816134b3565b82525050565b612af8816134b3565b82525050565b6000612b09826132c9565b612b13818561336a565b9350612b238185602086016134f8565b612b2c81613662565b840191505092915050565b6000612b42826132c9565b612b4c818561337b565b9350612b5c8185602086016134f8565b612b6581613662565b840191505092915050565b6000612b7d60188361337b565b91507f496e76616c696420637573746f6d6572206164647265737300000000000000006000830152602082019050919050565b6000612bbd60168361337b565b91507f41727469636c6520646f6573206e6f74206578697374000000000000000000006000830152602082019050919050565b6000612bfd60188361337b565b91507f496e636f7272656374207061796d656e7420616d6f756e7400000000000000006000830152602082019050919050565b6000612c3d60148361337b565b91507f426f6f6b696e6720616c726561647920706169640000000000000000000000006000830152602082019050919050565b6000612c7d60168361337b565b91507f4469737075746520706572696f642065787069726564000000000000000000006000830152602082019050919050565b6000612cbd60198361337b565b91507f426f6f6b696e6720616c72656164792070726f636573736564000000000000006000830152602082019050919050565b6000612cfd60108361337b565b91507f426f6f6b696e67206e6f742070616964000000000000000000000000000000006000830152602082019050919050565b6000612d3d60148361337b565b91507f4e6f2061727469636c65732070726f76696465640000000000000000000000006000830152602082019050919050565b60006080830160008301518482036000860152612d8d8282612afe565b9150506020830151612da260208601826128be565b506040830151612db56040860182612dd3565b506060830151612dc86060860182612ae0565b508091505092915050565b612ddc816134df565b82525050565b612deb816134df565b82525050565b6000602082019050612e0660008301846128cd565b92915050565b60006020820190508181036000830152612e268184612a0d565b905092915050565b600060a0820190508181036000830152612e488188612a82565b90508181036020830152612e5c8187612998565b90508181036040830152612e7081866128dc565b90508181036060830152612e848185612a82565b90508181036080830152612e98818461293a565b90509695505050505050565b6000610100820190508181036000830152612ebf818b612a82565b90508181036020830152612ed3818a612a82565b90508181036040830152612ee78189612a82565b90508181036060830152612efb81886128dc565b90508181036080830152612f0f81876128dc565b905081810360a0830152612f23818661293a565b905081810360c0830152612f37818561293a565b905081810360e0830152612f4b818461293a565b90509998505050505050505050565b60006060820190508181036000830152612f748186612b37565b9050612f8360208301856128cd565b612f906040830184612de2565b949350505050565b60006080820190508181036000830152612fb28187612b37565b9050612fc160208301866128cd565b612fce6040830185612de2565b612fdb6060830184612aef565b95945050505050565b60006020820190508181036000830152612ffd81612b70565b9050919050565b6000602082019050818103600083015261301d81612bb0565b9050919050565b6000602082019050818103600083015261303d81612bf0565b9050919050565b6000602082019050818103600083015261305d81612c30565b9050919050565b6000602082019050818103600083015261307d81612c70565b9050919050565b6000602082019050818103600083015261309d81612cb0565b9050919050565b600060208201905081810360008301526130bd81612cf0565b9050919050565b600060208201905081810360008301526130dd81612d30565b9050919050565b60006020820190506130f96000830184612de2565b92915050565b60006040820190506131146000830185612de2565b6131216020830184612de2565b9392505050565b60006101208201905061313e600083018c612de2565b61314b602083018b612de2565b613158604083018a612de2565b61316560608301896128cd565b61317260808301886128cd565b61317f60a0830187612aef565b61318c60c0830186612aef565b61319960e0830185612aef565b6131a7610100830184612de2565b9a9950505050505050505050565b6000604051905081810181811067ffffffffffffffff821117156131dc576131db613633565b5b8060405250919050565b600067ffffffffffffffff82111561320157613200613633565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561322d5761322c613633565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b6000613397826134df565b91506133a2836134df565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156133d7576133d66135a6565b5b828201905092915050565b60006133ed826134df565b91506133f8836134df565b925082613408576134076135d5565b5b828204905092915050565b600061341e826134df565b9150613429836134df565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613462576134616135a6565b5b828202905092915050565b6000613478826134df565b9150613483836134df565b925082821015613496576134956135a6565b5b828203905092915050565b60006134ac826134bf565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156135165780820151818401526020810190506134fb565b83811115613525576000848401525b50505050565b6000600282049050600182168061354357607f821691505b6020821081141561355757613556613604565b5b50919050565b6000613568826134df565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561359b5761359a6135a6565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b61367c816134a1565b811461368757600080fd5b50565b613693816134df565b811461369e57600080fd5b5056fea26469706673582212200d69e960f0e836e0c1ee9c79ab91b162c67d20ec5d199207fc7178993f69ad8464736f6c63430008000033