[ { "inputs": [ { "internalType": "address", "name": "_lzEndpoint", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint16", "name": "_srcChainId", "type": "uint16" }, { "indexed": false, "internalType": "bytes", "name": "_srcAddress", "type": "bytes" }, { "indexed": false, "internalType": "uint64", "name": "_nonce", "type": "uint64" }, { "indexed": false, "internalType": "bytes", "name": "_payload", "type": "bytes" }, { "indexed": false, "internalType": "bytes", "name": "_reason", "type": "bytes" } ], "name": "MessageFailed", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint16", "name": "_srcChainId", "type": "uint16" }, { "indexed": true, "internalType": "address", "name": "_to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "ReceiveFromChain", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint16", "name": "_srcChainId", "type": "uint16" }, { "indexed": false, "internalType": "bytes", "name": "_srcAddress", "type": "bytes" }, { "indexed": false, "internalType": "uint64", "name": "_nonce", "type": "uint64" }, { "indexed": false, "internalType": "bytes32", "name": "_payloadHash", "type": "bytes32" } ], "name": "RetryMessageSuccess", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint16", "name": "_dstChainId", "type": "uint16" }, { "indexed": true, "internalType": "address", "name": "_from", "type": "address" }, { "indexed": false, "internalType": "bytes", "name": "_toAddress", "type": "bytes" }, { "indexed": false, "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "SendToChain", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint16", "name": "_dstChainId", "type": "uint16" }, { "indexed": false, "internalType": "uint16", "name": "_type", "type": "uint16" }, { "indexed": false, "internalType": "uint256", "name": "_minDstGas", "type": "uint256" } ], "name": "SetMinDstGas", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "precrime", "type": "address" } ], "name": "SetPrecrime", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint16", "name": "_remoteChainId", "type": "uint16" }, { "indexed": false, "internalType": "bytes", "name": "_path", "type": "bytes" } ], "name": "SetTrustedRemote", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint16", "name": "_remoteChainId", "type": "uint16" }, { "indexed": false, "internalType": "bytes", "name": "_remoteAddress", "type": "bytes" } ], "name": "SetTrustedRemoteAddress", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "bool", "name": "_useCustomAdapterParams", "type": "bool" } ], "name": "SetUseCustomAdapterParams", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "inputs": [], "name": "DEFAULT_PAYLOAD_SIZE_LIMIT", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MAX_SUPPLY", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "NO_EXTRA_GAS", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "PT_SEND", "outputs": [ { "internalType": "uint16", "name": "", "type": "uint16" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "burn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "circulatingSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "subtractedValue", "type": "uint256" } ], "name": "decreaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_dstChainId", "type": "uint16" }, { "internalType": "bytes", "name": "_toAddress", "type": "bytes" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" }, { "internalType": "bool", "name": "_useZro", "type": "bool" }, { "internalType": "bytes", "name": "_adapterParams", "type": "bytes" } ], "name": "estimateSendFee", "outputs": [ { "internalType": "uint256", "name": "nativeFee", "type": "uint256" }, { "internalType": "uint256", "name": "zroFee", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "", "type": "uint16" }, { "internalType": "bytes", "name": "", "type": "bytes" }, { "internalType": "uint64", "name": "", "type": "uint64" } ], "name": "failedMessages", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_srcChainId", "type": "uint16" }, { "internalType": "bytes", "name": "_srcAddress", "type": "bytes" } ], "name": "forceResumeReceive", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_version", "type": "uint16" }, { "internalType": "uint16", "name": "_chainId", "type": "uint16" }, { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint256", "name": "_configType", "type": "uint256" } ], "name": "getConfig", "outputs": [ { "internalType": "bytes", "name": "", "type": "bytes" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_remoteChainId", "type": "uint16" } ], "name": "getTrustedRemoteAddress", "outputs": [ { "internalType": "bytes", "name": "", "type": "bytes" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "addedValue", "type": "uint256" } ], "name": "increaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_srcChainId", "type": "uint16" }, { "internalType": "bytes", "name": "_srcAddress", "type": "bytes" } ], "name": "isTrustedRemote", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "lzEndpoint", "outputs": [ { "internalType": "contract ILayerZeroEndpoint", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_srcChainId", "type": "uint16" }, { "internalType": "bytes", "name": "_srcAddress", "type": "bytes" }, { "internalType": "uint64", "name": "_nonce", "type": "uint64" }, { "internalType": "bytes", "name": "_payload", "type": "bytes" } ], "name": "lzReceive", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "", "type": "uint16" }, { "internalType": "uint16", "name": "", "type": "uint16" } ], "name": "minDstGasLookup", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_srcChainId", "type": "uint16" }, { "internalType": "bytes", "name": "_srcAddress", "type": "bytes" }, { "internalType": "uint64", "name": "_nonce", "type": "uint64" }, { "internalType": "bytes", "name": "_payload", "type": "bytes" } ], "name": "nonblockingLzReceive", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "", "type": "uint16" } ], "name": "payloadSizeLimitLookup", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "precrime", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_srcChainId", "type": "uint16" }, { "internalType": "bytes", "name": "_srcAddress", "type": "bytes" }, { "internalType": "uint64", "name": "_nonce", "type": "uint64" }, { "internalType": "bytes", "name": "_payload", "type": "bytes" } ], "name": "retryMessage", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_from", "type": "address" }, { "internalType": "uint16", "name": "_dstChainId", "type": "uint16" }, { "internalType": "bytes", "name": "_toAddress", "type": "bytes" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" }, { "internalType": "address payable", "name": "_refundAddress", "type": "address" }, { "internalType": "address", "name": "_zroPaymentAddress", "type": "address" }, { "internalType": "bytes", "name": "_adapterParams", "type": "bytes" } ], "name": "sendFrom", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_version", "type": "uint16" }, { "internalType": "uint16", "name": "_chainId", "type": "uint16" }, { "internalType": "uint256", "name": "_configType", "type": "uint256" }, { "internalType": "bytes", "name": "_config", "type": "bytes" } ], "name": "setConfig", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_dstChainId", "type": "uint16" }, { "internalType": "uint16", "name": "_packetType", "type": "uint16" }, { "internalType": "uint256", "name": "_minGas", "type": "uint256" } ], "name": "setMinDstGas", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_dstChainId", "type": "uint16" }, { "internalType": "uint256", "name": "_size", "type": "uint256" } ], "name": "setPayloadSizeLimit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_precrime", "type": "address" } ], "name": "setPrecrime", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_version", "type": "uint16" } ], "name": "setReceiveVersion", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_version", "type": "uint16" } ], "name": "setSendVersion", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_srcChainId", "type": "uint16" }, { "internalType": "bytes", "name": "_path", "type": "bytes" } ], "name": "setTrustedRemote", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_remoteChainId", "type": "uint16" }, { "internalType": "bytes", "name": "_remoteAddress", "type": "bytes" } ], "name": "setTrustedRemoteAddress", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bool", "name": "_useCustomAdapterParams", "type": "bool" } ], "name": "setUseCustomAdapterParams", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "token", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "", "type": "uint16" } ], "name": "trustedRemoteLookup", "outputs": [ { "internalType": "bytes", "name": "", "type": "bytes" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "useCustomAdapterParams", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" } ]
60a06040523480156200001157600080fd5b506040516200612938038062006129833981810160405281019062000037919062000266565b6040518060400160405280600881526020017f53746561646566690000000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f5354454144590000000000000000000000000000000000000000000000000000815250828282828080620000c9620000bd6200013060201b60201c565b6200013860201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505050505081600a908162000111919062000512565b5080600b908162000123919062000512565b50505050505050620005f9565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200022e8262000201565b9050919050565b620002408162000221565b81146200024c57600080fd5b50565b600081519050620002608162000235565b92915050565b6000602082840312156200027f576200027e620001fc565b5b60006200028f848285016200024f565b91505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200031a57607f821691505b60208210810362000330576200032f620002d2565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200039a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200035b565b620003a686836200035b565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620003f3620003ed620003e784620003be565b620003c8565b620003be565b9050919050565b6000819050919050565b6200040f83620003d2565b620004276200041e82620003fa565b84845462000368565b825550505050565b600090565b6200043e6200042f565b6200044b81848462000404565b505050565b5b8181101562000473576200046760008262000434565b60018101905062000451565b5050565b601f821115620004c2576200048c8162000336565b62000497846200034b565b81016020851015620004a7578190505b620004bf620004b6856200034b565b83018262000450565b50505b505050565b600082821c905092915050565b6000620004e760001984600802620004c7565b1980831691505092915050565b6000620005028383620004d4565b9150826002028217905092915050565b6200051d8262000298565b67ffffffffffffffff811115620005395762000538620002a3565b5b62000545825462000301565b6200055282828562000477565b600060209050601f8311600181146200058a576000841562000575578287015190505b620005818582620004f4565b865550620005f1565b601f1984166200059a8662000336565b60005b82811015620005c4578489015182556001820191506020850194506020810190506200059d565b86831015620005e45784890151620005e0601f891682620004d4565b8355505b6001600288020188555050505b505050505050565b608051615adc6200064d60003960008181610b4601528181610ef801528181610fdd015281816110d1015281816112d5015281816119c701528181611a7c0152818161200b0152612fc20152615adc6000f3fe6080604052600436106102875760003560e01c8063715018a61161015a578063baf3292d116100c1578063eab45d9c1161007a578063eab45d9c14610a36578063eb8d72b714610a5f578063ed629c5c14610a88578063f2fde38b14610ab3578063f5ecbdbc14610adc578063fc0c546a14610b1957610287565b8063baf3292d14610937578063c446183414610960578063cbed8b9c1461098b578063d1deba1f146109b4578063dd62ed3e146109d0578063df2a5b3b14610a0d57610287565b806395d89b411161011357806395d89b41146108015780639f38369a1461082c578063a457c2d714610869578063a6c3d165146108a6578063a9059cbb146108cf578063b353aaa71461090c57610287565b8063715018a6146106ef5780637533d788146107065780638cfd8f5c146107435780638da5cb5b146107805780639358928b146107ab578063950c8a74146107d657610287565b806332cb6b0c116101fe57806344770515116101b757806344770515146105da5780634c42899a1461060557806351905636146106305780635b8c41e61461064c57806366ad5c8a1461068957806370a08231146106b257610287565b806332cb6b0c146104a657806339509351146104d15780633d8b38f61461050e5780633f1f4fa41461054b57806342966c681461058857806342d65a8d146105b157610287565b80630df37483116102505780630df374831461038357806310ddb137146103ac57806318160ddd146103d557806323b872dd146104005780632a205e3d1461043d578063313ce5671461047b57610287565b80621d35671461028c57806301ffc9a7146102b557806306fdde03146102f257806307e0db171461031d578063095ea7b314610346575b600080fd5b34801561029857600080fd5b506102b360048036038101906102ae9190613583565b610b44565b005b3480156102c157600080fd5b506102dc60048036038101906102d79190613682565b610d9a565b6040516102e991906136ca565b60405180910390f35b3480156102fe57600080fd5b50610307610e5c565b6040516103149190613775565b60405180910390f35b34801561032957600080fd5b50610344600480360381019061033f9190613797565b610eee565b005b34801561035257600080fd5b5061036d60048036038101906103689190613858565b610f84565b60405161037a91906136ca565b60405180910390f35b34801561038f57600080fd5b506103aa60048036038101906103a59190613898565b610fa7565b005b3480156103b857600080fd5b506103d360048036038101906103ce9190613797565b610fd3565b005b3480156103e157600080fd5b506103ea611069565b6040516103f791906138e7565b60405180910390f35b34801561040c57600080fd5b5061042760048036038101906104229190613902565b611073565b60405161043491906136ca565b60405180910390f35b34801561044957600080fd5b50610464600480360381019061045f9190613981565b6110a2565b604051610472929190613a3d565b60405180910390f35b34801561048757600080fd5b50610490611183565b60405161049d9190613a82565b60405180910390f35b3480156104b257600080fd5b506104bb61118c565b6040516104c891906138e7565b60405180910390f35b3480156104dd57600080fd5b506104f860048036038101906104f39190613858565b61119b565b60405161050591906136ca565b60405180910390f35b34801561051a57600080fd5b5061053560048036038101906105309190613a9d565b6111d2565b60405161054291906136ca565b60405180910390f35b34801561055757600080fd5b50610572600480360381019061056d9190613797565b6112a6565b60405161057f91906138e7565b60405180910390f35b34801561059457600080fd5b506105af60048036038101906105aa9190613afd565b6112be565b005b3480156105bd57600080fd5b506105d860048036038101906105d39190613a9d565b6112cb565b005b3480156105e657600080fd5b506105ef611367565b6040516105fc91906138e7565b60405180910390f35b34801561061157600080fd5b5061061a61136c565b6040516106279190613b39565b60405180910390f35b61064a60048036038101906106459190613b92565b611371565b005b34801561065857600080fd5b50610673600480360381019061066e9190613da4565b611413565b6040516106809190613e2c565b60405180910390f35b34801561069557600080fd5b506106b060048036038101906106ab9190613583565b61145b565b005b3480156106be57600080fd5b506106d960048036038101906106d49190613e47565b61156c565b6040516106e691906138e7565b60405180910390f35b3480156106fb57600080fd5b506107046115b5565b005b34801561071257600080fd5b5061072d60048036038101906107289190613797565b6115c9565b60405161073a9190613ec9565b60405180910390f35b34801561074f57600080fd5b5061076a60048036038101906107659190613eeb565b611669565b60405161077791906138e7565b60405180910390f35b34801561078c57600080fd5b5061079561168e565b6040516107a29190613f3a565b60405180910390f35b3480156107b757600080fd5b506107c06116b7565b6040516107cd91906138e7565b60405180910390f35b3480156107e257600080fd5b506107eb6116c6565b6040516107f89190613f3a565b60405180910390f35b34801561080d57600080fd5b506108166116ec565b6040516108239190613775565b60405180910390f35b34801561083857600080fd5b50610853600480360381019061084e9190613797565b61177e565b6040516108609190613ec9565b60405180910390f35b34801561087557600080fd5b50610890600480360381019061088b9190613858565b611897565b60405161089d91906136ca565b60405180910390f35b3480156108b257600080fd5b506108cd60048036038101906108c89190613a9d565b61190e565b005b3480156108db57600080fd5b506108f660048036038101906108f19190613858565b6119a2565b60405161090391906136ca565b60405180910390f35b34801561091857600080fd5b506109216119c5565b60405161092e9190613fb4565b60405180910390f35b34801561094357600080fd5b5061095e60048036038101906109599190613e47565b6119e9565b005b34801561096c57600080fd5b50610975611a6c565b60405161098291906138e7565b60405180910390f35b34801561099757600080fd5b506109b260048036038101906109ad9190613fcf565b611a72565b005b6109ce60048036038101906109c99190613583565b611b14565b005b3480156109dc57600080fd5b506109f760048036038101906109f29190614057565b611d57565b604051610a0491906138e7565b60405180910390f35b348015610a1957600080fd5b50610a346004803603810190610a2f9190614097565b611dde565b005b348015610a4257600080fd5b50610a5d6004803603810190610a5891906140ea565b611ea2565b005b348015610a6b57600080fd5b50610a866004803603810190610a819190613a9d565b611efe565b005b348015610a9457600080fd5b50610a9d611f71565b604051610aaa91906136ca565b60405180910390f35b348015610abf57600080fd5b50610ada6004803603810190610ad59190613e47565b611f84565b005b348015610ae857600080fd5b50610b036004803603810190610afe9190614117565b612007565b604051610b109190613ec9565b60405180910390f35b348015610b2557600080fd5b50610b2e6120b8565b604051610b3b9190613f3a565b60405180910390f35b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610b836120c0565b73ffffffffffffffffffffffffffffffffffffffff1614610bd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd0906141ca565b60405180910390fd5b6000600160008861ffff1661ffff1681526020019081526020016000208054610c0190614219565b80601f0160208091040260200160405190810160405280929190818152602001828054610c2d90614219565b8015610c7a5780601f10610c4f57610100808354040283529160200191610c7a565b820191906000526020600020905b815481529060010190602001808311610c5d57829003601f168201915b50505050509050805186869050148015610c95575060008151115b8015610cbe575080805190602001208686604051610cb492919061427a565b6040518091039020145b610cfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf490614305565b60405180910390fd5b610d918787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508686868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506120c8565b50505050505050565b6000807bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610e4557507f36372b07000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610e555750610e5482612193565b5b9050919050565b6060600a8054610e6b90614219565b80601f0160208091040260200160405190810160405280929190818152602001828054610e9790614219565b8015610ee45780601f10610eb957610100808354040283529160200191610ee4565b820191906000526020600020905b815481529060010190602001808311610ec757829003601f168201915b5050505050905090565b610ef661220d565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166307e0db17826040518263ffffffff1660e01b8152600401610f4f9190613b39565b600060405180830381600087803b158015610f6957600080fd5b505af1158015610f7d573d6000803e3d6000fd5b5050505050565b600080610f8f6120c0565b9050610f9c81858561228b565b600191505092915050565b610faf61220d565b80600360008461ffff1661ffff168152602001908152602001600020819055505050565b610fdb61220d565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166310ddb137826040518263ffffffff1660e01b81526004016110349190613b39565b600060405180830381600087803b15801561104e57600080fd5b505af1158015611062573d6000803e3d6000fd5b5050505050565b6000600954905090565b60008061107e6120c0565b905061108b858285612454565b6110968585856124e0565b60019150509392505050565b6000806000808989896040516020016110be9493929190614352565b60405160208183030381529060405290507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166340a7bb108b30848a8a8a6040518763ffffffff1660e01b815260040161113296959493929190614392565b6040805180830381865afa15801561114e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611172919061440a565b925092505097509795505050505050565b60006012905090565b6aa56fa5b99019a5c800000081565b6000806111a66120c0565b90506111c78185856111b88589611d57565b6111c29190614479565b61228b565b600191505092915050565b600080600160008661ffff1661ffff16815260200190815260200160002080546111fb90614219565b80601f016020809104026020016040519081016040528092919081815260200182805461122790614219565b80156112745780601f1061124957610100808354040283529160200191611274565b820191906000526020600020905b81548152906001019060200180831161125757829003601f168201915b50505050509050838360405161128b92919061427a565b60405180910390208180519060200120149150509392505050565b60036020528060005260406000206000915090505481565b6112c83382612762565b50565b6112d361220d565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166342d65a8d8484846040518463ffffffff1660e01b8152600401611330939291906144ad565b600060405180830381600087803b15801561134a57600080fd5b505af115801561135e573d6000803e3d6000fd5b50505050505050565b600081565b600081565b611408898989898080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505088888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061293a565b505050505050505050565b60056020528260005260406000208280516020810182018051848252602083016020850120818352809550505050505060205280600052604060002060009250925050505481565b3073ffffffffffffffffffffffffffffffffffffffff1661147a6120c0565b73ffffffffffffffffffffffffffffffffffffffff16146114d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c790614551565b60405180910390fd5b6115648686868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506129ee565b505050505050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6115bd61220d565b6115c76000612a5a565b565b600160205280600052604060002060009150905080546115e890614219565b80601f016020809104026020016040519081016040528092919081815260200182805461161490614219565b80156116615780601f1061163657610100808354040283529160200191611661565b820191906000526020600020905b81548152906001019060200180831161164457829003601f168201915b505050505081565b6002602052816000526040600020602052806000526040600020600091509150505481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006116c1611069565b905090565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600b80546116fb90614219565b80601f016020809104026020016040519081016040528092919081815260200182805461172790614219565b80156117745780601f1061174957610100808354040283529160200191611774565b820191906000526020600020905b81548152906001019060200180831161175757829003601f168201915b5050505050905090565b60606000600160008461ffff1661ffff16815260200190815260200160002080546117a890614219565b80601f01602080910402602001604051908101604052809291908181526020018280546117d490614219565b80156118215780601f106117f657610100808354040283529160200191611821565b820191906000526020600020905b81548152906001019060200180831161180457829003601f168201915b50505050509050600081510361186c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611863906145bd565b60405180910390fd5b61188f60006014835161187f91906145dd565b83612b1e9092919063ffffffff16565b915050919050565b6000806118a26120c0565b905060006118b08286611d57565b9050838110156118f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ec90614683565b60405180910390fd5b611902828686840361228b565b60019250505092915050565b61191661220d565b81813060405160200161192b939291906146eb565b604051602081830303815290604052600160008561ffff1661ffff168152602001908152602001600020908161196191906148b7565b507f8c0400cfe2d1199b1a725c78960bcc2a344d869b80590d0f2bd005db15a572ce838383604051611995939291906144ad565b60405180910390a1505050565b6000806119ad6120c0565b90506119ba8185856124e0565b600191505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6119f161220d565b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f5db758e995a17ec1ad84bdef7e8c3293a0bd6179bcce400dff5d4c3d87db726b81604051611a619190613f3a565b60405180910390a150565b61271081565b611a7a61220d565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663cbed8b9c86868686866040518663ffffffff1660e01b8152600401611adb959493929190614989565b600060405180830381600087803b158015611af557600080fd5b505af1158015611b09573d6000803e3d6000fd5b505050505050505050565b6000600560008861ffff1661ffff1681526020019081526020016000208686604051611b4192919061427a565b908152602001604051809103902060008567ffffffffffffffff1667ffffffffffffffff1681526020019081526020016000205490506000801b8103611bbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb390614a49565b60405180910390fd5b808383604051611bcd92919061427a565b604051809103902014611c15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0c90614adb565b60405180910390fd5b6000801b600560008961ffff1661ffff1681526020019081526020016000208787604051611c4492919061427a565b908152602001604051809103902060008667ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002081905550611d0f8787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508686868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506129ee565b7fc264d91f3adc5588250e1551f547752ca0cfa8f6b530d243b9f9f4cab10ea8e58787878785604051611d46959493929190614b0a565b60405180910390a150505050505050565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611de661220d565b60008111611e29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2090614ba4565b60405180910390fd5b80600260008561ffff1661ffff16815260200190815260200160002060008461ffff1661ffff168152602001908152602001600020819055507f9d5c7c0b934da8fefa9c7760c98383778a12dfbfc0c3b3106518f43fb9508ac0838383604051611e9593929190614bc4565b60405180910390a1505050565b611eaa61220d565b80600660006101000a81548160ff0219169083151502179055507f1584ad594a70cbe1e6515592e1272a987d922b097ead875069cebe8b40c004a481604051611ef391906136ca565b60405180910390a150565b611f0661220d565b8181600160008661ffff1661ffff1681526020019081526020016000209182611f30929190614c06565b507ffa41487ad5d6728f0b19276fa1eddc16558578f5109fc39d2dc33c3230470dab838383604051611f64939291906144ad565b60405180910390a1505050565b600660009054906101000a900460ff1681565b611f8c61220d565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611ffb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff290614d48565b60405180910390fd5b61200481612a5a565b50565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f5ecbdbc868630866040518563ffffffff1660e01b81526004016120689493929190614d68565b600060405180830381865afa158015612085573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906120ae9190614e1d565b9050949350505050565b600030905090565b600033905090565b6000806121745a60966366ad5c8a60e01b898989896040516024016120f09493929190614e66565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050503073ffffffffffffffffffffffffffffffffffffffff16612c3c909392919063ffffffff16565b915091508161218b5761218a8686868685612cd4565b5b505050505050565b60007f14e4ceea000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612206575061220582612d82565b5b9050919050565b6122156120c0565b73ffffffffffffffffffffffffffffffffffffffff1661223361168e565b73ffffffffffffffffffffffffffffffffffffffff1614612289576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228090614f05565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036122fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f190614f97565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612369576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236090615029565b60405180910390fd5b80600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161244791906138e7565b60405180910390a3505050565b60006124608484611d57565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146124da57818110156124cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c390615095565b60405180910390fd5b6124d9848484840361228b565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361254f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254690615127565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036125be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b5906151b9565b60405180910390fd5b6125c9838383612dec565b6000600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612650576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126479061524b565b60405180910390fd5b818103600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126e59190614479565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161274991906138e7565b60405180910390a361275c848484612df1565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036127d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c8906152dd565b60405180910390fd5b6127dd82600083612dec565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612864576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285b9061536f565b60405180910390fd5b818103600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600960008282546128bc91906145dd565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161292191906138e7565b60405180910390a361293583600084612df1565b505050565b612948866000836000612df6565b600061295688888888612e67565b9050600080878360405160200161296f9392919061538f565b604051602081830303815290604052905061298e888287878734612ec9565b8873ffffffffffffffffffffffffffffffffffffffff168861ffff167f39a4c66499bcf4b56d79f0dde8ed7a9d4925a0df55825206b2b8531e202be0d089856040516129db9291906153cd565b60405180910390a3505050505050505050565b600060208201519050600061ffff168161ffff1603612a1857612a138585858561305f565b612a53565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4a90615449565b60405180910390fd5b5050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b606081601f83612b2e9190614479565b1015612b6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b66906154b5565b60405180910390fd5b8183612b7b9190614479565b84511015612bbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bb590615521565b60405180910390fd5b6060821560008114612bdf5760405191506000825260208201604052612c30565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015612c1d5780518352602083019250602081019050612c00565b50868552601f19601f8301166040525050505b50809150509392505050565b6000606060008060008661ffff1667ffffffffffffffff811115612c6357612c62613c79565b5b6040519080825280601f01601f191660200182016040528015612c955781602001600182028036833780820191505090505b50905060008087516020890160008d8df191503d925086831115612cb7578692505b828152826000602083013e81819450945050505094509492505050565b8180519060200120600560008761ffff1661ffff16815260200190815260200160002085604051612d059190615572565b908152602001604051809103902060008567ffffffffffffffff1667ffffffffffffffff168152602001908152602001600020819055507fe183f33de2837795525b4792ca4cd60535bd77c53b7e7030060bfcf5734d6b0c8585858585604051612d73959493929190615589565b60405180910390a15050505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b505050565b505050565b600660009054906101000a900460ff1615612e1c57612e17848484846130fc565b612e61565b6000825114612e60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e5790615663565b60405180910390fd5b5b50505050565b600080612e726120c0565b90508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614612eb357612eb2868285612454565b5b612ebd8684612762565b82915050949350505050565b6000600160008861ffff1661ffff1681526020019081526020016000208054612ef190614219565b80601f0160208091040260200160405190810160405280929190818152602001828054612f1d90614219565b8015612f6a5780601f10612f3f57610100808354040283529160200191612f6a565b820191906000526020600020905b815481529060010190602001808311612f4d57829003601f168201915b505050505090506000815103612fb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fac906156f5565b60405180910390fd5b612fc08787516131db565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c58031008389848a8a8a8a6040518863ffffffff1660e01b815260040161302496959493929190615724565b6000604051808303818588803b15801561303d57600080fd5b505af1158015613051573d6000803e3d6000fd5b505050505050505050505050565b6000808280602001905181019061307691906157af565b9250925050600061309160008461325190919063ffffffff16565b905061309e8782846132c7565b91508073ffffffffffffffffffffffffffffffffffffffff168761ffff167fbf551ec93859b170f9b2141bd9298bf3f64322c6f7beb2543a0cb669834118bf846040516130eb91906138e7565b60405180910390a350505050505050565b6000613107836132dd565b9050600082600260008861ffff1661ffff16815260200190815260200160002060008761ffff1661ffff1681526020019081526020016000205461314b9190614479565b905060008111613190576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131879061586a565b60405180910390fd5b808210156131d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131ca906158d6565b60405180910390fd5b505050505050565b6000600360008461ffff1661ffff168152602001908152602001600020549050600081036132095761271090505b8082111561324c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161324390615942565b60405180910390fd5b505050565b60006014826132609190614479565b835110156132a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161329a906159ae565b60405180910390fd5b60006c01000000000000000000000000836020860101510490508091505092915050565b60006132d38383613330565b8190509392505050565b6000602282511015613324576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161331b90615a1a565b60405180910390fd5b60228201519050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361339f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161339690615a86565b60405180910390fd5b6133ab60008383612dec565b80600960008282546133bd9190614479565b9250508190555080600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546134139190614479565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161347891906138e7565b60405180910390a361348c60008383612df1565b5050565b6000604051905090565b600080fd5b600080fd5b600061ffff82169050919050565b6134bb816134a4565b81146134c657600080fd5b50565b6000813590506134d8816134b2565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112613503576135026134de565b5b8235905067ffffffffffffffff8111156135205761351f6134e3565b5b60208301915083600182028301111561353c5761353b6134e8565b5b9250929050565b600067ffffffffffffffff82169050919050565b61356081613543565b811461356b57600080fd5b50565b60008135905061357d81613557565b92915050565b600080600080600080608087890312156135a05761359f61349a565b5b60006135ae89828a016134c9565b965050602087013567ffffffffffffffff8111156135cf576135ce61349f565b5b6135db89828a016134ed565b955095505060406135ee89828a0161356e565b935050606087013567ffffffffffffffff81111561360f5761360e61349f565b5b61361b89828a016134ed565b92509250509295509295509295565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61365f8161362a565b811461366a57600080fd5b50565b60008135905061367c81613656565b92915050565b6000602082840312156136985761369761349a565b5b60006136a68482850161366d565b91505092915050565b60008115159050919050565b6136c4816136af565b82525050565b60006020820190506136df60008301846136bb565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561371f578082015181840152602081019050613704565b60008484015250505050565b6000601f19601f8301169050919050565b6000613747826136e5565b61375181856136f0565b9350613761818560208601613701565b61376a8161372b565b840191505092915050565b6000602082019050818103600083015261378f818461373c565b905092915050565b6000602082840312156137ad576137ac61349a565b5b60006137bb848285016134c9565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006137ef826137c4565b9050919050565b6137ff816137e4565b811461380a57600080fd5b50565b60008135905061381c816137f6565b92915050565b6000819050919050565b61383581613822565b811461384057600080fd5b50565b6000813590506138528161382c565b92915050565b6000806040838503121561386f5761386e61349a565b5b600061387d8582860161380d565b925050602061388e85828601613843565b9150509250929050565b600080604083850312156138af576138ae61349a565b5b60006138bd858286016134c9565b92505060206138ce85828601613843565b9150509250929050565b6138e181613822565b82525050565b60006020820190506138fc60008301846138d8565b92915050565b60008060006060848603121561391b5761391a61349a565b5b60006139298682870161380d565b935050602061393a8682870161380d565b925050604061394b86828701613843565b9150509250925092565b61395e816136af565b811461396957600080fd5b50565b60008135905061397b81613955565b92915050565b600080600080600080600060a0888a0312156139a05761399f61349a565b5b60006139ae8a828b016134c9565b975050602088013567ffffffffffffffff8111156139cf576139ce61349f565b5b6139db8a828b016134ed565b965096505060406139ee8a828b01613843565b94505060606139ff8a828b0161396c565b935050608088013567ffffffffffffffff811115613a2057613a1f61349f565b5b613a2c8a828b016134ed565b925092505092959891949750929550565b6000604082019050613a5260008301856138d8565b613a5f60208301846138d8565b9392505050565b600060ff82169050919050565b613a7c81613a66565b82525050565b6000602082019050613a976000830184613a73565b92915050565b600080600060408486031215613ab657613ab561349a565b5b6000613ac4868287016134c9565b935050602084013567ffffffffffffffff811115613ae557613ae461349f565b5b613af1868287016134ed565b92509250509250925092565b600060208284031215613b1357613b1261349a565b5b6000613b2184828501613843565b91505092915050565b613b33816134a4565b82525050565b6000602082019050613b4e6000830184613b2a565b92915050565b6000613b5f826137c4565b9050919050565b613b6f81613b54565b8114613b7a57600080fd5b50565b600081359050613b8c81613b66565b92915050565b600080600080600080600080600060e08a8c031215613bb457613bb361349a565b5b6000613bc28c828d0161380d565b9950506020613bd38c828d016134c9565b98505060408a013567ffffffffffffffff811115613bf457613bf361349f565b5b613c008c828d016134ed565b97509750506060613c138c828d01613843565b9550506080613c248c828d01613b7d565b94505060a0613c358c828d0161380d565b93505060c08a013567ffffffffffffffff811115613c5657613c5561349f565b5b613c628c828d016134ed565b92509250509295985092959850929598565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613cb18261372b565b810181811067ffffffffffffffff82111715613cd057613ccf613c79565b5b80604052505050565b6000613ce3613490565b9050613cef8282613ca8565b919050565b600067ffffffffffffffff821115613d0f57613d0e613c79565b5b613d188261372b565b9050602081019050919050565b82818337600083830152505050565b6000613d47613d4284613cf4565b613cd9565b905082815260208101848484011115613d6357613d62613c74565b5b613d6e848285613d25565b509392505050565b600082601f830112613d8b57613d8a6134de565b5b8135613d9b848260208601613d34565b91505092915050565b600080600060608486031215613dbd57613dbc61349a565b5b6000613dcb868287016134c9565b935050602084013567ffffffffffffffff811115613dec57613deb61349f565b5b613df886828701613d76565b9250506040613e098682870161356e565b9150509250925092565b6000819050919050565b613e2681613e13565b82525050565b6000602082019050613e416000830184613e1d565b92915050565b600060208284031215613e5d57613e5c61349a565b5b6000613e6b8482850161380d565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000613e9b82613e74565b613ea58185613e7f565b9350613eb5818560208601613701565b613ebe8161372b565b840191505092915050565b60006020820190508181036000830152613ee38184613e90565b905092915050565b60008060408385031215613f0257613f0161349a565b5b6000613f10858286016134c9565b9250506020613f21858286016134c9565b9150509250929050565b613f34816137e4565b82525050565b6000602082019050613f4f6000830184613f2b565b92915050565b6000819050919050565b6000613f7a613f75613f70846137c4565b613f55565b6137c4565b9050919050565b6000613f8c82613f5f565b9050919050565b6000613f9e82613f81565b9050919050565b613fae81613f93565b82525050565b6000602082019050613fc96000830184613fa5565b92915050565b600080600080600060808688031215613feb57613fea61349a565b5b6000613ff9888289016134c9565b955050602061400a888289016134c9565b945050604061401b88828901613843565b935050606086013567ffffffffffffffff81111561403c5761403b61349f565b5b614048888289016134ed565b92509250509295509295909350565b6000806040838503121561406e5761406d61349a565b5b600061407c8582860161380d565b925050602061408d8582860161380d565b9150509250929050565b6000806000606084860312156140b0576140af61349a565b5b60006140be868287016134c9565b93505060206140cf868287016134c9565b92505060406140e086828701613843565b9150509250925092565b600060208284031215614100576140ff61349a565b5b600061410e8482850161396c565b91505092915050565b600080600080608085870312156141315761413061349a565b5b600061413f878288016134c9565b9450506020614150878288016134c9565b93505060406141618782880161380d565b925050606061417287828801613843565b91505092959194509250565b7f4c7a4170703a20696e76616c696420656e64706f696e742063616c6c65720000600082015250565b60006141b4601e836136f0565b91506141bf8261417e565b602082019050919050565b600060208201905081810360008301526141e3816141a7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061423157607f821691505b602082108103614244576142436141ea565b5b50919050565b600081905092915050565b6000614261838561424a565b935061426e838584613d25565b82840190509392505050565b6000614287828486614255565b91508190509392505050565b7f4c7a4170703a20696e76616c696420736f757263652073656e64696e6720636f60008201527f6e74726163740000000000000000000000000000000000000000000000000000602082015250565b60006142ef6026836136f0565b91506142fa82614293565b604082019050919050565b6000602082019050818103600083015261431e816142e2565b9050919050565b60006143318385613e7f565b935061433e838584613d25565b6143478361372b565b840190509392505050565b60006060820190506143676000830187613b2a565b818103602083015261437a818587614325565b905061438960408301846138d8565b95945050505050565b600060a0820190506143a76000830189613b2a565b6143b46020830188613f2b565b81810360408301526143c68187613e90565b90506143d560608301866136bb565b81810360808301526143e8818486614325565b9050979650505050505050565b6000815190506144048161382c565b92915050565b600080604083850312156144215761442061349a565b5b600061442f858286016143f5565b9250506020614440858286016143f5565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061448482613822565b915061448f83613822565b92508282019050808211156144a7576144a661444a565b5b92915050565b60006040820190506144c26000830186613b2a565b81810360208301526144d5818486614325565b9050949350505050565b7f4e6f6e626c6f636b696e674c7a4170703a2063616c6c6572206d75737420626560008201527f204c7a4170700000000000000000000000000000000000000000000000000000602082015250565b600061453b6026836136f0565b9150614546826144df565b604082019050919050565b6000602082019050818103600083015261456a8161452e565b9050919050565b7f4c7a4170703a206e6f20747275737465642070617468207265636f7264000000600082015250565b60006145a7601d836136f0565b91506145b282614571565b602082019050919050565b600060208201905081810360008301526145d68161459a565b9050919050565b60006145e882613822565b91506145f383613822565b925082820390508181111561460b5761460a61444a565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061466d6025836136f0565b915061467882614611565b604082019050919050565b6000602082019050818103600083015261469c81614660565b9050919050565b60008160601b9050919050565b60006146bb826146a3565b9050919050565b60006146cd826146b0565b9050919050565b6146e56146e0826137e4565b6146c2565b82525050565b60006146f8828587614255565b915061470482846146d4565b601482019150819050949350505050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026147777fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261473a565b614781868361473a565b95508019841693508086168417925050509392505050565b60006147b46147af6147aa84613822565b613f55565b613822565b9050919050565b6000819050919050565b6147ce83614799565b6147e26147da826147bb565b848454614747565b825550505050565b600090565b6147f76147ea565b6148028184846147c5565b505050565b5b818110156148265761481b6000826147ef565b600181019050614808565b5050565b601f82111561486b5761483c81614715565b6148458461472a565b81016020851015614854578190505b6148686148608561472a565b830182614807565b50505b505050565b600082821c905092915050565b600061488e60001984600802614870565b1980831691505092915050565b60006148a7838361487d565b9150826002028217905092915050565b6148c082613e74565b67ffffffffffffffff8111156148d9576148d8613c79565b5b6148e38254614219565b6148ee82828561482a565b600060209050601f831160018114614921576000841561490f578287015190505b614919858261489b565b865550614981565b601f19841661492f86614715565b60005b8281101561495757848901518255600182019150602085019450602081019050614932565b868310156149745784890151614970601f89168261487d565b8355505b6001600288020188555050505b505050505050565b600060808201905061499e6000830188613b2a565b6149ab6020830187613b2a565b6149b860408301866138d8565b81810360608301526149cb818486614325565b90509695505050505050565b7f4e6f6e626c6f636b696e674c7a4170703a206e6f2073746f726564206d65737360008201527f6167650000000000000000000000000000000000000000000000000000000000602082015250565b6000614a336023836136f0565b9150614a3e826149d7565b604082019050919050565b60006020820190508181036000830152614a6281614a26565b9050919050565b7f4e6f6e626c6f636b696e674c7a4170703a20696e76616c6964207061796c6f6160008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b6000614ac56021836136f0565b9150614ad082614a69565b604082019050919050565b60006020820190508181036000830152614af481614ab8565b9050919050565b614b0481613543565b82525050565b6000608082019050614b1f6000830188613b2a565b8181036020830152614b32818688614325565b9050614b416040830185614afb565b614b4e6060830184613e1d565b9695505050505050565b7f4c7a4170703a20696e76616c6964206d696e4761730000000000000000000000600082015250565b6000614b8e6015836136f0565b9150614b9982614b58565b602082019050919050565b60006020820190508181036000830152614bbd81614b81565b9050919050565b6000606082019050614bd96000830186613b2a565b614be66020830185613b2a565b614bf360408301846138d8565b949350505050565b600082905092915050565b614c108383614bfb565b67ffffffffffffffff811115614c2957614c28613c79565b5b614c338254614219565b614c3e82828561482a565b6000601f831160018114614c6d5760008415614c5b578287013590505b614c65858261489b565b865550614ccd565b601f198416614c7b86614715565b60005b82811015614ca357848901358255600182019150602085019450602081019050614c7e565b86831015614cc05784890135614cbc601f89168261487d565b8355505b6001600288020188555050505b50505050505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614d326026836136f0565b9150614d3d82614cd6565b604082019050919050565b60006020820190508181036000830152614d6181614d25565b9050919050565b6000608082019050614d7d6000830187613b2a565b614d8a6020830186613b2a565b614d976040830185613f2b565b614da460608301846138d8565b95945050505050565b6000614dc0614dbb84613cf4565b613cd9565b905082815260208101848484011115614ddc57614ddb613c74565b5b614de7848285613701565b509392505050565b600082601f830112614e0457614e036134de565b5b8151614e14848260208601614dad565b91505092915050565b600060208284031215614e3357614e3261349a565b5b600082015167ffffffffffffffff811115614e5157614e5061349f565b5b614e5d84828501614def565b91505092915050565b6000608082019050614e7b6000830187613b2a565b8181036020830152614e8d8186613e90565b9050614e9c6040830185614afb565b8181036060830152614eae8184613e90565b905095945050505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614eef6020836136f0565b9150614efa82614eb9565b602082019050919050565b60006020820190508181036000830152614f1e81614ee2565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614f816024836136f0565b9150614f8c82614f25565b604082019050919050565b60006020820190508181036000830152614fb081614f74565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006150136022836136f0565b915061501e82614fb7565b604082019050919050565b6000602082019050818103600083015261504281615006565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b600061507f601d836136f0565b915061508a82615049565b602082019050919050565b600060208201905081810360008301526150ae81615072565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006151116025836136f0565b915061511c826150b5565b604082019050919050565b6000602082019050818103600083015261514081615104565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006151a36023836136f0565b91506151ae82615147565b604082019050919050565b600060208201905081810360008301526151d281615196565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006152356026836136f0565b9150615240826151d9565b604082019050919050565b6000602082019050818103600083015261526481615228565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006152c76021836136f0565b91506152d28261526b565b604082019050919050565b600060208201905081810360008301526152f6816152ba565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b60006153596022836136f0565b9150615364826152fd565b604082019050919050565b600060208201905081810360008301526153888161534c565b9050919050565b60006060820190506153a46000830186613b2a565b81810360208301526153b68185613e90565b90506153c560408301846138d8565b949350505050565b600060408201905081810360008301526153e78185613e90565b90506153f660208301846138d8565b9392505050565b7f4f4654436f72653a20756e6b6e6f776e207061636b6574207479706500000000600082015250565b6000615433601c836136f0565b915061543e826153fd565b602082019050919050565b6000602082019050818103600083015261546281615426565b9050919050565b7f736c6963655f6f766572666c6f77000000000000000000000000000000000000600082015250565b600061549f600e836136f0565b91506154aa82615469565b602082019050919050565b600060208201905081810360008301526154ce81615492565b9050919050565b7f736c6963655f6f75744f66426f756e6473000000000000000000000000000000600082015250565b600061550b6011836136f0565b9150615516826154d5565b602082019050919050565b6000602082019050818103600083015261553a816154fe565b9050919050565b600061554c82613e74565b615556818561424a565b9350615566818560208601613701565b80840191505092915050565b600061557e8284615541565b915081905092915050565b600060a08201905061559e6000830188613b2a565b81810360208301526155b08187613e90565b90506155bf6040830186614afb565b81810360608301526155d18185613e90565b905081810360808301526155e58184613e90565b90509695505050505050565b7f4f4654436f72653a205f61646170746572506172616d73206d7573742062652060008201527f656d7074792e0000000000000000000000000000000000000000000000000000602082015250565b600061564d6026836136f0565b9150615658826155f1565b604082019050919050565b6000602082019050818103600083015261567c81615640565b9050919050565b7f4c7a4170703a2064657374696e6174696f6e20636861696e206973206e6f742060008201527f61207472757374656420736f7572636500000000000000000000000000000000602082015250565b60006156df6030836136f0565b91506156ea82615683565b604082019050919050565b6000602082019050818103600083015261570e816156d2565b9050919050565b61571e81613b54565b82525050565b600060c0820190506157396000830189613b2a565b818103602083015261574b8188613e90565b9050818103604083015261575f8187613e90565b905061576e6060830186615715565b61577b6080830185613f2b565b81810360a083015261578d8184613e90565b9050979650505050505050565b6000815190506157a9816134b2565b92915050565b6000806000606084860312156157c8576157c761349a565b5b60006157d68682870161579a565b935050602084015167ffffffffffffffff8111156157f7576157f661349f565b5b61580386828701614def565b9250506040615814868287016143f5565b9150509250925092565b7f4c7a4170703a206d696e4761734c696d6974206e6f7420736574000000000000600082015250565b6000615854601a836136f0565b915061585f8261581e565b602082019050919050565b6000602082019050818103600083015261588381615847565b9050919050565b7f4c7a4170703a20676173206c696d697420697320746f6f206c6f770000000000600082015250565b60006158c0601b836136f0565b91506158cb8261588a565b602082019050919050565b600060208201905081810360008301526158ef816158b3565b9050919050565b7f4c7a4170703a207061796c6f61642073697a6520697320746f6f206c61726765600082015250565b600061592c6020836136f0565b9150615937826158f6565b602082019050919050565b6000602082019050818103600083015261595b8161591f565b9050919050565b7f746f416464726573735f6f75744f66426f756e64730000000000000000000000600082015250565b60006159986015836136f0565b91506159a382615962565b602082019050919050565b600060208201905081810360008301526159c78161598b565b9050919050565b7f4c7a4170703a20696e76616c69642061646170746572506172616d7300000000600082015250565b6000615a04601c836136f0565b9150615a0f826159ce565b602082019050919050565b60006020820190508181036000830152615a33816159f7565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000615a70601f836136f0565b9150615a7b82615a3a565b602082019050919050565b60006020820190508181036000830152615a9f81615a63565b905091905056fea2646970667358221220a3dcc1b0864f0dacdc859f10109cdfe4a00499a795a1467d41c7a5fe4d817fe464736f6c634300081100330000000000000000000000003c2269811836af69497e5f486a85d7316753cf62