@q-dev/gdk-sdk
Version:
Typescript Library to interact with GDK Contracts
457 lines • 51.4 kB
JSON
{
"_format": "hh-sol-artifact-1",
"contractName": "ForeignNFTMintingModule",
"sourceName": "contracts/presets/cross-chain/ForeignNFTMintingModule.sol",
"abi": [
{
"inputs": [
{
"internalType": "address",
"name": "mailboxAddress_",
"type": "address"
},
{
"internalType": "uint32",
"name": "remoteDomain_",
"type": "uint32"
},
{
"internalType": "bytes32",
"name": "remoteRouter_",
"type": "bytes32"
},
{
"internalType": "address",
"name": "ism_",
"type": "address"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint8",
"name": "version",
"type": "uint8"
}
],
"name": "Initialized",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "uint32",
"name": "origin",
"type": "uint32"
},
{
"indexed": true,
"internalType": "uint32",
"name": "destination",
"type": "uint32"
},
{
"indexed": false,
"internalType": "bytes32",
"name": "sender",
"type": "bytes32"
},
{
"components": [
{
"internalType": "address[]",
"name": "to",
"type": "address[]"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
},
{
"internalType": "enum Action",
"name": "action",
"type": "uint8"
}
],
"indexed": false,
"internalType": "struct MessageAction",
"name": "action",
"type": "tuple"
}
],
"name": "MessageReceived",
"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"
},
{
"inputs": [],
"name": "NFT_MINTING_RESOURCE",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "token_",
"type": "address"
},
{
"internalType": "uint256",
"name": "startPoint_",
"type": "uint256"
}
],
"name": "__ForeignNFTMintingModule_init",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes",
"name": "data_",
"type": "bytes"
}
],
"name": "arbitraryNFTExecute",
"outputs": [
{
"internalType": "bytes",
"name": "",
"type": "bytes"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address[]",
"name": "recipients_",
"type": "address[]"
}
],
"name": "batchMintTo",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "domains",
"outputs": [
{
"internalType": "uint32[]",
"name": "",
"type": "uint32[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint32",
"name": "_domain",
"type": "uint32"
},
{
"internalType": "bytes32",
"name": "_router",
"type": "bytes32"
}
],
"name": "enrollRemoteRouter",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint32[]",
"name": "_domains",
"type": "uint32[]"
},
{
"internalType": "bytes32[]",
"name": "_addresses",
"type": "bytes32[]"
}
],
"name": "enrollRemoteRouters",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint32",
"name": "_origin",
"type": "uint32"
},
{
"internalType": "bytes32",
"name": "_sender",
"type": "bytes32"
},
{
"internalType": "bytes",
"name": "_message",
"type": "bytes"
}
],
"name": "handle",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [],
"name": "hook",
"outputs": [
{
"internalType": "contract IPostDispatchHook",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "interchainSecurityModule",
"outputs": [
{
"internalType": "contract IInterchainSecurityModule",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "isModuleNFTOwner",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "localDomain",
"outputs": [
{
"internalType": "uint32",
"name": "",
"type": "uint32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "mailbox",
"outputs": [
{
"internalType": "contract IMailbox",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "to_",
"type": "address"
}
],
"name": "mintTo",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "owner",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "renounceOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint32",
"name": "_domain",
"type": "uint32"
}
],
"name": "routers",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_hook",
"type": "address"
}
],
"name": "setHook",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_module",
"type": "address"
}
],
"name": "setInterchainSecurityModule",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "startPoint",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "supportedNFT",
"outputs": [
{
"internalType": "contract ISupportedNFT",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "newOwner_",
"type": "address"
}
],
"name": "transferOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint32",
"name": "_domain",
"type": "uint32"
}
],
"name": "unenrollRemoteRouter",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint32[]",
"name": "_domains",
"type": "uint32[]"
}
],
"name": "unenrollRemoteRouters",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
}
],
"bytecode": "0x60c06040523480156200001157600080fd5b5060405162002b1438038062002b14833981016040819052620000349162000334565b8380806001600160a01b0381163b6200006a5760405162461bcd60e51b81526004016200006190620003d6565b60405180910390fd5b6001600160a01b03821660808190526040805163234d8e3d60e21b81529051638d3638f4916004808201926020929091908290030181865afa158015620000b5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000db9190620003e8565b63ffffffff1660a052620000ef3362000124565b5050506200010483836200017660201b60201c565b6200010f816200018e565b6200011a8462000124565b505050506200049c565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6200018a609763ffffffff841683620001fb565b5050565b806001600160a01b0381163b151580620001af57506001600160a01b038116155b620001ce5760405162461bcd60e51b815260040162000061906200040d565b620001d86200020e565b50606680546001600160a01b0319166001600160a01b0392909216919091179055565b620002088383836200023d565b50505050565b6033546001600160a01b031633146200023b5760405162461bcd60e51b815260040162000061906200048a565b565b600082815260028401602052604081208290556200025c848462000264565b949350505050565b60006200027283836200027b565b90505b92915050565b6000818152600183016020526040812054620002c45750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000275565b50600062000275565b60006001600160a01b03821662000275565b620002ea81620002cd565b8114620002f657600080fd5b50565b80516200027581620002df565b63ffffffff8116620002ea565b8051620002758162000306565b80620002ea565b8051620002758162000320565b600080600080608085870312156200034f576200034f600080fd5b60006200035d8787620002f9565b9450506020620003708782880162000313565b9350506040620003838782880162000327565b92505060606200039687828801620002f9565b91505092959194509250565b601e8152602081017f4d61696c626f78436c69656e743a20696e76616c6964206d61696c626f780000815290505b60200190565b602080825281016200027581620003a2565b600060208284031215620003ff57620003ff600080fd5b60006200025c848462000313565b602080825281016200027581602781527f4d61696c626f78436c69656e743a20696e76616c696420636f6e74726163742060208201526673657474696e6760c81b604082015260600190565b60208082527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65729101908152620003d0565b60208082528101620002758162000459565b60805160a051612644620004d0600039600061034b0152600081816103f20152818161071b0152610e6901526126446000f3fe60806040526004361061014b5760003560e01c8063755edd17116100b6578063c43fa2981161006f578063c43fa298146103c0578063d5438eae146103e0578063de523cf314610414578063e9198bf914610434578063efae508a14610454578063f2fde38b1461047457600080fd5b8063755edd17146102d75780637f5a7c7b146102f75780638895db0d146103175780638d3638f4146103395780638da5cb5b1461037a578063b49c53a7146103a057600080fd5b8063440df4f411610108578063440df4f41461022d578063505196ad1461024f57806356d5d4751461026f5780636030c50814610282578063715018a6146102a257806371a15b38146102b757600080fd5b80630e72cc061461015057806315632cea146101725780631b12d14a1461019d57806328eab0b1146101c05780632ead72f6146101ed5780633dfd38731461020d575b600080fd5b34801561015c57600080fd5b5061017061016b3660046117bb565b610494565b005b34801561017e57600080fd5b50610187610504565b60405161019491906117e6565b60405180910390f35b3480156101a957600080fd5b506101b360cc5481565b60405161019491906117fa565b3480156101cc57600080fd5b5060cb546101e0906001600160a01b031681565b604051610194919061184a565b3480156101f957600080fd5b506101b361020836600461186f565b610596565b34801561021957600080fd5b506101706102283660046117bb565b6105b5565b34801561023957600080fd5b5061024261061c565b60405161019491906118fa565b34801561025b57600080fd5b5061017061026a36600461191c565b61062d565b61017061027d3660046119a3565b610710565b34801561028e57600080fd5b5061017061029d366004611b0e565b610797565b3480156102ae57600080fd5b506101706108a3565b3480156102c357600080fd5b506101706102d2366004611b92565b6108b7565b3480156102e357600080fd5b506101706102f23660046117bb565b610912565b34801561030357600080fd5b506065546101e0906001600160a01b031681565b34801561032357600080fd5b5061032c6109e1565b6040516101949190611c2f565b34801561034557600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b6040516101949190611c40565b34801561038657600080fd5b506033546001600160a01b03166040516101949190611c57565b3480156103ac57600080fd5b506101706103bb366004611c65565b610a6f565b3480156103cc57600080fd5b5061032c6103db366004611d15565b610a85565b3480156103ec57600080fd5b506101e07f000000000000000000000000000000000000000000000000000000000000000081565b34801561042057600080fd5b506066546101e0906001600160a01b031681565b34801561044057600080fd5b5061017061044f366004611d4f565b610aad565b34801561046057600080fd5b5061017061046f36600461186f565b610b3a565b34801561048057600080fd5b5061017061048f3660046117bb565b610b4e565b806001600160a01b0381163b1515806104b457506001600160a01b038116155b6104d95760405162461bcd60e51b81526004016104d090611dfe565b60405180910390fd5b6104e1610b57565b50606680546001600160a01b0319166001600160a01b0392909216919091179055565b6000306001600160a01b031660cb60009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610563573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105879190611e19565b6001600160a01b031614905090565b6000806105ad609763ffffffff80861690610b8116565b949350505050565b806001600160a01b0381163b1515806105d557506001600160a01b038116155b6105f15760405162461bcd60e51b81526004016104d090611dfe565b6105f9610b57565b50606580546001600160a01b0319166001600160a01b0392909216919091179055565b60606106286097610b9a565b905090565b600054610100900460ff161580801561064d5750600054600160ff909116105b806106675750303b158015610667575060005460ff166001145b6106835760405162461bcd60e51b81526004016104d090611e83565b6000805460ff1916600117905580156106a6576000805461ff0019166101001790555b6106c0838360405180602001604052806000815250610c54565b801561070b576000805461ff00191690556040517f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989061070290600190611ea7565b60405180910390a15b505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146107585760405162461bcd60e51b81526004016104d090611ef1565b600061076385610ca6565b90508381146107845760405162461bcd60e51b81526004016104d090611f41565b61079085858585610cf2565b5050505050565b61079f610b57565b805160cc5460cb546001600160a01b031660005b8381101561089a576000836107c781611f67565b60cb549095509091506107e3906001600160a01b031682610f36565b1561080f5760006107fd6001600160a01b03851683611000565b905061080a816001611f80565b945090505b826001600160a01b0316639f6ed25f87848151811061083057610830611f93565b6020026020010151836040518363ffffffff1660e01b8152600401610856929190611fa9565b600060405180830381600087803b15801561087057600080fd5b505af1158015610884573d6000803e3d6000fd5b50505050508061089390611f67565b90506107b3565b505060cc555050565b6108ab610b57565b6108b56000611057565b565b6108bf610b57565b8060005b8181101561090c576108fa8484838181106108e0576108e0611f93565b90506020020160208101906108f5919061186f565b6110a9565b610905600182611f80565b90506108c3565b50505050565b61091a610b57565b60cc80546000918261092b83611f67565b9091555060cb54909150610948906001600160a01b031682610f36565b156109795760cb54600090610966906001600160a01b031683611000565b9050610973816001611f80565b60cc5590505b60cb54604051639f6ed25f60e01b81526001600160a01b0390911690639f6ed25f906109ab9085908590600401611fa9565b600060405180830381600087803b1580156109c557600080fd5b505af11580156109d9573d6000803e3d6000fd5b505050505050565b60ca80546109ee90611fef565b80601f0160208091040260200160405190810160405280929190818152602001828054610a1a90611fef565b8015610a675780601f10610a3c57610100808354040283529160200191610a67565b820191906000526020600020905b815481529060010190602001808311610a4a57829003601f168201915b505050505081565b610a77610b57565b610a8182826110e4565b5050565b6060610a8f610b57565b60cb54610aa5906001600160a01b0316836110fa565b90505b919050565b610ab5610b57565b828114610ad45760405162461bcd60e51b81526004016104d090612037565b8260005b818110156109d957610b28868683818110610af557610af5611f93565b9050602002016020810190610b0a919061186f565b858584818110610b1c57610b1c611f93565b905060200201356110e4565b610b33600182611f80565b9050610ad8565b610b42610b57565b610b4b816110a9565b50565b610b4b8161113e565b6033546001600160a01b031633146108b55760405162461bcd60e51b81526004016104d090612077565b600080610b8e8484611175565b915091505b9250929050565b60606000610ba7836111af565b905080516001600160401b03811115610bc257610bc2611a10565b604051908082528060200260200182016040528015610beb578160200160208202803683370190505b50915060005b8151811015610c4d57818181518110610c0c57610c0c611f93565b6020026020010151838281518110610c2657610c26611f93565b63ffffffff9092166020928302919091019091015280610c4581611f67565b915050610bf1565b5050919050565b60cb80546001600160a01b0319166001600160a01b0385161790556000829003610c9457610c8c6001600160a01b0384166000611000565b60cc55610c9a565b60cc8290555b60ca61090c8282612118565b60008080610cbe609763ffffffff80871690610b8116565b9150915081610ccc85611249565b90610cea5760405162461bcd60e51b81526004016104d09190611c2f565b509392505050565b6000610d008284018461227e565b9050600081604001516004811115610d1a57610d1a6122b8565b03610d4b57610d468160000151600081518110610d3957610d39611f93565b6020026020010151610912565b610e67565b600181604001516004811115610d6357610d636122b8565b03610d73578051610d4690610797565b600281604001516004811115610d8b57610d8b6122b8565b03610e145760cb54815180516001600160a01b039092169163f2fde38b9190600090610db957610db9611f93565b60200260200101516040518263ffffffff1660e01b8152600401610ddd9190611c57565b600060405180830381600087803b158015610df757600080fd5b505af1158015610e0b573d6000803e3d6000fd5b50505050610e67565b600481604001516004811115610e2c57610e2c6122b8565b03610e5857610d468160000151600081518110610e4b57610e4b611f93565b6020026020010151610b4e565b610e658160200151610a85565b505b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638d3638f46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ec5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee991906122d9565b63ffffffff168563ffffffff167f53db515da3870e49bf8642faf6e1b4b15db0c9d78c9b344db7ea17799ee09f578684604051610f279291906123b6565b60405180910390a35050505050565b6000806000846001600160a01b0316636352211e60e01b85604051602401610f5e91906117fa565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051610f9c91906123f8565b600060405180830381855afa9150503d8060008114610fd7576040519150601f19603f3d011682016040523d82523d6000602084013e610fdc565b606091505b5091509150818015610ff55750610ff28161240c565b15155b925050505b92915050565b60008061100d8484611280565b90505b8083101561105057600061102484836112dd565b90506110308582610f36565b61103c5780915061104a565b611047816001611f80565b93505b50611010565b9392505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6110bd609763ffffffff808416906112f816565b6110c682611249565b90610a815760405162461bcd60e51b81526004016104d09190611c2f565b610a81609763ffffffff80851690849061130416565b6060611050838360006040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c6564000081525061130f565b611146610b57565b6001600160a01b03811661116c5760405162461bcd60e51b81526004016104d090612483565b610b4b81611057565b60008181526002830160205260408120548190806111a45761119785856113ab565b925060009150610b939050565b600192509050610b93565b606060006111bc836113b7565b9050806001600160401b038111156111d6576111d6611a10565b6040519080825280602002602001820160405280156111ff578160200160208202803683370190505b50915060005b81811015610c4d5761121784826113c2565b60001c83828151811061122c5761122c611f93565b60209081029190910101528061124181611f67565b915050611205565b606061125a8263ffffffff166113ce565b60405160200161126a9190612493565b6040516020818303038152906040529050919050565b600081815b61128f8583610f36565b15610cea5761129f8260026124c3565b6112aa906001611f80565b9150600f816112b881611f67565b925011156112d85760405162461bcd60e51b81526004016104d090612518565b611285565b60006112ec600284841861253e565b61105090848416611f80565b60006110508383611460565b61090c83838361147d565b6060824710156113315760405162461bcd60e51b81526004016104d090612593565b600080866001600160a01b0316858760405161134d91906123f8565b60006040518083038185875af1925050503d806000811461138a576040519150601f19603f3d011682016040523d82523d6000602084013e61138f565b606091505b50915091506113a08783838761149a565b979650505050505050565b600061105083836114e3565b6000610aa5826114fb565b60006110508383611505565b606060006113db8361152f565b60010190506000816001600160401b038111156113fa576113fa611a10565b6040519080825280601f01601f191660200182016040528015611424576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461142e57509392505050565b600081815260028301602052604081208190556110508383611607565b600082815260028401602052604081208290556105ad8484611613565b606083156114d95782516000036114d2576001600160a01b0385163b6114d25760405162461bcd60e51b81526004016104d0906125d5565b50816105ad565b6105ad838361161f565b60008181526001830160205260408120541515611050565b6000610aa5825490565b600082600001828154811061151c5761151c611f93565b9060005260206000200154905092915050565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b831061156e5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef8100000000831061159a576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106115b857662386f26fc10000830492506010015b6305f5e10083106115d0576305f5e100830492506008015b61271083106115e457612710830492506004015b606483106115f6576064830492506002015b600a8310610ffa5760010192915050565b60006110508383611649565b6000611050838361173c565b81511561162f5781518083602001fd5b8060405162461bcd60e51b81526004016104d09190611c2f565b6000818152600183016020526040812054801561173257600061166d6001836125e5565b8554909150600090611681906001906125e5565b90508181146116e65760008660000182815481106116a1576116a1611f93565b90600052602060002001549050808760000184815481106116c4576116c4611f93565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806116f7576116f76125f8565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610ffa565b6000915050610ffa565b600081815260018301602052604081205461178357508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610ffa565b506000610ffa565b60006001600160a01b038216610aa5565b6117a58161178b565b8114610b4b57600080fd5b8035610ffa8161179c565b6000602082840312156117d0576117d0600080fd5b60006105ad84846117b0565b8015155b82525050565b60208101610ffa82846117dc565b806117e0565b60208101610ffa82846117f4565b6000610aa56001600160a01b03831661181f565b90565b6001600160a01b031690565b6000610aa582611808565b6000610aa58261182b565b6117e081611836565b60208101610ffa8284611841565b63ffffffff81166117a5565b8035610ffa81611858565b60006020828403121561188457611884600080fd5b60006105ad8484611864565b63ffffffff81166117e0565b6118a68282611890565b5060200190565b60200190565b60006118bd825190565b808452602093840193830160005b828110156118f05781516118df878261189c565b9650506020820191506001016118cb565b5093949350505050565b6020808252810161105081846118b3565b806117a5565b8035610ffa8161190b565b6000806040838503121561193257611932600080fd5b600061193e85856117b0565b925050602061194f85828601611911565b9150509250929050565b60008083601f84011261196e5761196e600080fd5b5081356001600160401b0381111561198857611988600080fd5b602083019150836001820283011115610b9357610b93600080fd5b600080600080606085870312156119bc576119bc600080fd5b60006119c88787611864565b94505060206119d987828801611911565b93505060408501356001600160401b038111156119f8576119f8600080fd5b611a0487828801611959565b95989497509550505050565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681018181106001600160401b0382111715611a4b57611a4b611a10565b6040525050565b6000611a5d60405190565b9050610aa88282611a26565b60006001600160401b03821115611a8257611a82611a10565b5060209081020190565b6000611a9f611a9a84611a69565b611a52565b83815290506020808201908402830185811115611abe57611abe600080fd5b835b81811015611ae057611ad287826117b0565b835260209283019201611ac0565b5050509392505050565b600082601f830112611afe57611afe600080fd5b81356105ad848260208601611a8c565b600060208284031215611b2357611b23600080fd5b81356001600160401b03811115611b3c57611b3c600080fd5b6105ad84828501611aea565b60008083601f840112611b5d57611b5d600080fd5b5081356001600160401b03811115611b7757611b77600080fd5b602083019150836020820283011115610b9357610b93600080fd5b60008060208385031215611ba857611ba8600080fd5b82356001600160401b03811115611bc157611bc1600080fd5b611bcd85828601611b48565b92509250509250929050565b60005b83811015611bf4578181015183820152602001611bdc565b50506000910152565b6000611c07825190565b808452602084019350611c1e818560208601611bd9565b601f01601f19169290920192915050565b602080825281016110508184611bfd565b60208101610ffa8284611890565b6117e08161178b565b60208101610ffa8284611c4e565b60008060408385031215611c7b57611c7b600080fd5b600061193e8585611864565b60006001600160401b03821115611ca057611ca0611a10565b601f19601f83011660200192915050565b82818337506000910152565b6000611ccb611a9a84611c87565b905082815260208101848484011115611ce657611ce6600080fd5b610cea848285611cb1565b600082601f830112611d0557611d05600080fd5b81356105ad848260208601611cbd565b600060208284031215611d2a57611d2a600080fd5b81356001600160401b03811115611d4357611d43600080fd5b6105ad84828501611cf1565b60008060008060408587031215611d6857611d68600080fd5b84356001600160401b03811115611d8157611d81600080fd5b611d8d87828801611b48565b945094505060208501356001600160401b03811115611dae57611dae600080fd5b611a0487828801611b48565b60278152602081017f4d61696c626f78436c69656e743a20696e76616c696420636f6e74726163742081526673657474696e6760c81b602082015290505b60400190565b60208082528101610aa581611dba565b8051610ffa8161179c565b600060208284031215611e2e57611e2e600080fd5b60006105ad8484611e0e565b602e8152602081017f496e697469616c697a61626c653a20636f6e747261637420697320616c72656181526d191e481a5b9a5d1a585b1a5e995960921b60208201529050611df8565b60208082528101610aa581611e3a565b600060ff8216610aa5565b6117e081611e93565b60208101610ffa8284611e9e565b60218152602081017f4d61696c626f78436c69656e743a2073656e646572206e6f74206d61696c626f8152600f60fb1b60208201529050611df8565b60208082528101610aa581611eb5565b60258152602081017f456e726f6c6c656420726f7574657220646f6573206e6f74206d61746368207381526432b73232b960d91b60208201529050611df8565b60208082528101610aa581611f01565b634e487b7160e01b600052601160045260246000fd5b600060018201611f7957611f79611f51565b5060010190565b80820180821115610ffa57610ffa611f51565b634e487b7160e01b600052603260045260246000fd5b60608101611fb78285611c4e565b611fc460208301846117f4565b818103604083015260008152602081016105ad565b634e487b7160e01b600052602260045260246000fd5b60028104600182168061200357607f821691505b60208210810361201557612015611fd9565b50919050565b600781526020810166042d8cadccee8d60cb1b815290506118ad565b60208082528101610aa58161201b565b60208082527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657291019081526118ad565b60208082528101610aa581612047565b6000610aa561181c8381565b61209c83612087565b815460001960089490940293841b1916921b91909117905550565b600061070b818484612093565b81811015610a81576120d76000826120b7565b6001016120c4565b601f82111561070b576000818152602090206020601f850104810160208510156121065750805b6107906020601f8601048301826120c4565b81516001600160401b0381111561213157612131611a10565b61213b8254611fef565b6121468282856120df565b506020601f82116001811461217b57600083156121635750848201515b600019600885021c1981166002850217855550610790565b600084815260208120601f198516915b828110156121ab578785015182556020948501946001909201910161218b565b50848210156121c85783870151600019601f87166008021c191681555b50505050600202600101905550565b60058110610b4b57600080fd5b8035610ffa816121d7565b60006060828403121561220457612204600080fd5b61220e6060611a52565b905081356001600160401b0381111561222957612229600080fd5b61223584828501611aea565b82525060208201356001600160401b0381111561225457612254600080fd5b61226084828501611cf1565b6020830152506040612274848285016121e4565b9082015292915050565b60006020828403121561229357612293600080fd5b81356001600160401b038111156122ac576122ac600080fd5b6105ad848285016121ef565b634e487b7160e01b600052602160045260246000fd5b8051610ffa81611858565b6000602082840312156122ee576122ee600080fd5b60006105ad84846122ce565b6118a68282611c4e565b600061230e825190565b808452602093840193830160005b828110156118f057815161233087826122fa565b96505060208201915060010161231c565b60058110610b4b57610b4b6122b8565b80610aa881612341565b6000610aa582612351565b6117e08161235b565b80516060808452600091908401906123878282612304565b915050602083015184820360208601526123a18282611bfd565b9150506040830151610cea6040860182612366565b604081016123c482856117f4565b81810360208301526105ad818461236f565b60006123e0825190565b6123ee818560208601611bd9565b9290920192915050565b610ffa81836123d6565b6000610ffa825190565b6000612416825190565b6020830161242381612402565b9250506020811015612015576000196020919091036008021b16919050565b60268152602081017f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181526564647265737360d01b60208201529050611df8565b60208082528101610aa581612442565b7f4e6f20726f7574657220656e726f6c6c656420666f7220646f6d61696e3a20008152601f01610ffa81836123d6565b8181028115828204841417610ffa57610ffa611f51565b60238152602081017f4e46544d696e74696e673a204e6f206672656520746f6b656e2069647320666f8152621d5b9960ea1b60208201529050611df8565b60208082528101610aa5816124da565b634e487b7160e01b600052601260045260246000fd5b60008261254d5761254d612528565b500490565b60268152602081017f416464726573733a20696e73756666696369656e742062616c616e636520666f8152651c8818d85b1b60d21b60208201529050611df8565b60208082528101610aa581612552565b601d8152602081017f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000815290506118ad565b60208082528101610aa5816125a3565b81810381811115610ffa57610ffa611f51565b634e487b7160e01b600052603160045260246000fdfea264697066735822122039e32db05e95da405a66c75857fa6122f475c907a52ca65b4414ebd53285c12964736f6c63430008140033",
"deployedBytecode": "0x60806040526004361061014b5760003560e01c8063755edd17116100b6578063c43fa2981161006f578063c43fa298146103c0578063d5438eae146103e0578063de523cf314610414578063e9198bf914610434578063efae508a14610454578063f2fde38b1461047457600080fd5b8063755edd17146102d75780637f5a7c7b146102f75780638895db0d146103175780638d3638f4146103395780638da5cb5b1461037a578063b49c53a7146103a057600080fd5b8063440df4f411610108578063440df4f41461022d578063505196ad1461024f57806356d5d4751461026f5780636030c50814610282578063715018a6146102a257806371a15b38146102b757600080fd5b80630e72cc061461015057806315632cea146101725780631b12d14a1461019d57806328eab0b1146101c05780632ead72f6146101ed5780633dfd38731461020d575b600080fd5b34801561015c57600080fd5b5061017061016b3660046117bb565b610494565b005b34801561017e57600080fd5b50610187610504565b60405161019491906117e6565b60405180910390f35b3480156101a957600080fd5b506101b360cc5481565b60405161019491906117fa565b3480156101cc57600080fd5b5060cb546101e0906001600160a01b031681565b604051610194919061184a565b3480156101f957600080fd5b506101b361020836600461186f565b610596565b34801561021957600080fd5b506101706102283660046117bb565b6105b5565b34801561023957600080fd5b5061024261061c565b60405161019491906118fa565b34801561025b57600080fd5b5061017061026a36600461191c565b61062d565b61017061027d3660046119a3565b610710565b34801561028e57600080fd5b5061017061029d366004611b0e565b610797565b3480156102ae57600080fd5b506101706108a3565b3480156102c357600080fd5b506101706102d2366004611b92565b6108b7565b3480156102e357600080fd5b506101706102f23660046117bb565b610912565b34801561030357600080fd5b506065546101e0906001600160a01b031681565b34801561032357600080fd5b5061032c6109e1565b6040516101949190611c2f565b34801561034557600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b6040516101949190611c40565b34801561038657600080fd5b506033546001600160a01b03166040516101949190611c57565b3480156103ac57600080fd5b506101706103bb366004611c65565b610a6f565b3480156103cc57600080fd5b5061032c6103db366004611d15565b610a85565b3480156103ec57600080fd5b506101e07f000000000000000000000000000000000000000000000000000000000000000081565b34801561042057600080fd5b506066546101e0906001600160a01b031681565b34801561044057600080fd5b5061017061044f366004611d4f565b610aad565b34801561046057600080fd5b5061017061046f36600461186f565b610b3a565b34801561048057600080fd5b5061017061048f3660046117bb565b610b4e565b806001600160a01b0381163b1515806104b457506001600160a01b038116155b6104d95760405162461bcd60e51b81526004016104d090611dfe565b60405180910390fd5b6104e1610b57565b50606680546001600160a01b0319166001600160a01b0392909216919091179055565b6000306001600160a01b031660cb60009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610563573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105879190611e19565b6001600160a01b031614905090565b6000806105ad609763ffffffff80861690610b8116565b949350505050565b806001600160a01b0381163b1515806105d557506001600160a01b038116155b6105f15760405162461bcd60e51b81526004016104d090611dfe565b6105f9610b57565b50606580546001600160a01b0319166001600160a01b0392909216919091179055565b60606106286097610b9a565b905090565b600054610100900460ff161580801561064d5750600054600160ff909116105b806106675750303b158015610667575060005460ff166001145b6106835760405162461bcd60e51b81526004016104d090611e83565b6000805460ff1916600117905580156106a6576000805461ff0019166101001790555b6106c0838360405180602001604052806000815250610c54565b801561070b576000805461ff00191690556040517f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989061070290600190611ea7565b60405180910390a15b505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146107585760405162461bcd60e51b81526004016104d090611ef1565b600061076385610ca6565b90508381146107845760405162461bcd60e51b81526004016104d090611f41565b61079085858585610cf2565b5050505050565b61079f610b57565b805160cc5460cb546001600160a01b031660005b8381101561089a576000836107c781611f67565b60cb549095509091506107e3906001600160a01b031682610f36565b1561080f5760006107fd6001600160a01b03851683611000565b905061080a816001611f80565b945090505b826001600160a01b0316639f6ed25f87848151811061083057610830611f93565b6020026020010151836040518363ffffffff1660e01b8152600401610856929190611fa9565b600060405180830381600087803b15801561087057600080fd5b505af1158015610884573d6000803e3d6000fd5b50505050508061089390611f67565b90506107b3565b505060cc555050565b6108ab610b57565b6108b56000611057565b565b6108bf610b57565b8060005b8181101561090c576108fa8484838181106108e0576108e0611f93565b90506020020160208101906108f5919061186f565b6110a9565b610905600182611f80565b90506108c3565b50505050565b61091a610b57565b60cc80546000918261092b83611f67565b9091555060cb54909150610948906001600160a01b031682610f36565b156109795760cb54600090610966906001600160a01b031683611000565b9050610973816001611f80565b60cc5590505b60cb54604051639f6ed25f60e01b81526001600160a01b0390911690639f6ed25f906109ab9085908590600401611fa9565b600060405180830381600087803b1580156109c557600080fd5b505af11580156109d9573d6000803e3d6000fd5b505050505050565b60ca80546109ee90611fef565b80601f0160208091040260200160405190810160405280929190818152602001828054610a1a90611fef565b8015610a675780601f10610a3c57610100808354040283529160200191610a67565b820191906000526020600020905b815481529060010190602001808311610a4a57829003601f168201915b505050505081565b610a77610b57565b610a8182826110e4565b5050565b6060610a8f610b57565b60cb54610aa5906001600160a01b0316836110fa565b90505b919050565b610ab5610b57565b828114610ad45760405162461bcd60e51b81526004016104d090612037565b8260005b818110156109d957610b28868683818110610af557610af5611f93565b9050602002016020810190610b0a919061186f565b858584818110610b1c57610b1c611f93565b905060200201356110e4565b610b33600182611f80565b9050610ad8565b610b42610b57565b610b4b816110a9565b50565b610b4b8161113e565b6033546001600160a01b031633146108b55760405162461bcd60e51b81526004016104d090612077565b600080610b8e8484611175565b915091505b9250929050565b60606000610ba7836111af565b905080516001600160401b03811115610bc257610bc2611a10565b604051908082528060200260200182016040528015610beb578160200160208202803683370190505b50915060005b8151811015610c4d57818181518110610c0c57610c0c611f93565b6020026020010151838281518110610c2657610c26611f93565b63ffffffff9092166020928302919091019091015280610c4581611f67565b915050610bf1565b5050919050565b60cb80546001600160a01b0319166001600160a01b0385161790556000829003610c9457610c8c6001600160a01b0384166000611000565b60cc55610c9a565b60cc8290555b60ca61090c8282612118565b60008080610cbe609763ffffffff80871690610b8116565b9150915081610ccc85611249565b90610cea5760405162461bcd60e51b81526004016104d09190611c2f565b509392505050565b6000610d008284018461227e565b9050600081604001516004811115610d1a57610d1a6122b8565b03610d4b57610d468160000151600081518110610d3957610d39611f93565b6020026020010151610912565b610e67565b600181604001516004811115610d6357610d636122b8565b03610d73578051610d4690610797565b600281604001516004811115610d8b57610d8b6122b8565b03610e145760cb54815180516001600160a01b039092169163f2fde38b9190600090610db957610db9611f93565b60200260200101516040518263ffffffff1660e01b8152600401610ddd9190611c57565b600060405180830381600087803b158015610df757600080fd5b505af1158015610e0b573d6000803e3d6000fd5b50505050610e67565b600481604001516004811115610e2c57610e2c6122b8565b03610e5857610d468160000151600081518110610e4b57610e4b611f93565b6020026020010151610b4e565b610e658160200151610a85565b505b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638d3638f46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ec5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee991906122d9565b63ffffffff168563ffffffff167f53db515da3870e49bf8642faf6e1b4b15db0c9d78c9b344db7ea17799ee09f578684604051610f279291906123b6565b60405180910390a35050505050565b6000806000846001600160a01b0316636352211e60e01b85604051602401610f5e91906117fa565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051610f9c91906123f8565b600060405180830381855afa9150503d8060008114610fd7576040519150601f19603f3d011682016040523d82523d6000602084013e610fdc565b606091505b5091509150818015610ff55750610ff28161240c565b15155b925050505b92915050565b60008061100d8484611280565b90505b8083101561105057600061102484836112dd565b90506110308582610f36565b61103c5780915061104a565b611047816001611f80565b93505b50611010565b9392505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6110bd609763ffffffff808416906112f816565b6110c682611249565b90610a815760405162461bcd60e51b81526004016104d09190611c2f565b610a81609763ffffffff80851690849061130416565b6060611050838360006040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c6564000081525061130f565b611146610b57565b6001600160a01b03811661116c5760405162461bcd60e51b81526004016104d090612483565b610b4b81611057565b60008181526002830160205260408120548190806111a45761119785856113ab565b925060009150610b939050565b600192509050610b93565b606060006111bc836113b7565b9050806001600160401b038111156111d6576111d6611a10565b6040519080825280602002602001820160405280156111ff578160200160208202803683370190505b50915060005b81811015610c4d5761121784826113c2565b60001c83828151811061122c5761122c611f93565b60209081029190910101528061124181611f67565b915050611205565b606061125a8263ffffffff166113ce565b60405160200161126a9190612493565b6040516020818303038152906040529050919050565b600081815b61128f8583610f36565b15610cea5761129f8260026124c3565b6112aa906001611f80565b9150600f816112b881611f67565b925011156112d85760405162461bcd60e51b81526004016104d090612518565b611285565b60006112ec600284841861253e565b61105090848416611f80565b60006110508383611460565b61090c83838361147d565b6060824710156113315760405162461bcd60e51b81526004016104d090612593565b600080866001600160a01b0316858760405161134d91906123f8565b60006040518083038185875af1925050503d806000811461138a576040519150601f19603f3d011682016040523d82523d6000602084013e61138f565b606091505b50915091506113a08783838761149a565b979650505050505050565b600061105083836114e3565b6000610aa5826114fb565b60006110508383611505565b606060006113db8361152f565b60010190506000816001600160401b038111156113fa576113fa611a10565b6040519080825280601f01601f191660200182016040528015611424576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461142e57509392505050565b600081815260028301602052604081208190556110508383611607565b600082815260028401602052604081208290556105ad8484611613565b606083156114d95782516000036114d2576001600160a01b0385163b6114d25760405162461bcd60e51b81526004016104d0906125d5565b50816105ad565b6105ad838361161f565b60008181526001830160205260408120541515611050565b6000610aa5825490565b600082600001828154811061151c5761151c611f93565b9060005260206000200154905092915050565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b831061156e5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef8100000000831061159a576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106115b857662386f26fc10000830492506010015b6305f5e10083106115d0576305f5e100830492506008015b61271083106115e457612710830492506004015b606483106115f6576064830492506002015b600a8310610ffa5760010192915050565b60006110508383611649565b6000611050838361173c565b81511561162f5781518083602001fd5b8060405162461bcd60e51b81526004016104d09190611c2f565b6000818152600183016020526040812054801561173257600061166d6001836125e5565b8554909150600090611681906001906125e5565b90508181146116e65760008660000182815481106116a1576116a1611f93565b90600052602060002001549050808760000184815481106116c4576116c4611f93565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806116f7576116f76125f8565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610ffa565b6000915050610ffa565b600081815260018301602052604081205461178357508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610ffa565b506000610ffa565b60006001600160a01b038216610aa5565b6117a58161178b565b8114610b4b57600080fd5b8035610ffa8161179c565b6000602082840312156117d0576117d0600080fd5b60006105ad84846117b0565b8015155b82525050565b60208101610ffa82846117dc565b806117e0565b60208101610ffa82846117f4565b6000610aa56001600160a01b03831661181f565b90565b6001600160a01b031690565b6000610aa582611808565b6000610aa58261182b565b6117e081611836565b60208101610ffa8284611841565b63ffffffff81166117a5565b8035610ffa81611858565b60006020828403121561188457611884600080fd5b60006105ad8484611864565b63ffffffff81166117e0565b6118a68282611890565b5060200190565b60200190565b60006118bd825190565b808452602093840193830160005b828110156118f05781516118df878261189c565b9650506020820191506001016118cb565b5093949350505050565b6020808252810161105081846118b3565b806117a5565b8035610ffa8161190b565b6000806040838503121561193257611932600080fd5b600061193e85856117b0565b925050602061194f85828601611911565b9150509250929050565b60008083601f84011261196e5761196e600080fd5b5081356001600160401b0381111561198857611988600080fd5b602083019150836001820283011115610b9357610b93600080fd5b600080600080606085870312156119bc576119bc600080fd5b60006119c88787611864565b94505060206119d987828801611911565b93505060408501356001600160401b038111156119f8576119f8600080fd5b611a0487828801611959565b95989497509550505050565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681018181106001600160401b0382111715611a4b57611a4b611a10565b6040525050565b6000611a5d60405190565b9050610aa88282611a26565b60006001600160401b03821115611a8257611a82611a10565b5060209081020190565b6000611a9f611a9a84611a69565b611a52565b83815290506020808201908402830185811115611abe57611abe600080fd5b835b81811015611ae057611ad287826117b0565b835260209283019201611ac0565b5050509392505050565b600082601f830112611afe57611afe600080fd5b81356105ad848260208601611a8c565b600060208284031215611b2357611b23600080fd5b81356001600160401b03811115611b3c57611b3c600080fd5b6105ad84828501611aea565b60008083601f840112611b5d57611b5d600080fd5b5081356001600160401b03811115611b7757611b77600080fd5b602083019150836020820283011115610b9357610b93600080fd5b60008060208385031215611ba857611ba8600080fd5b82356001600160401b03811115611bc157611bc1600080fd5b611bcd85828601611b48565b92509250509250929050565b60005b83811015611bf4578181015183820152602001611bdc565b50506000910152565b6000611c07825190565b808452602084019350611c1e818560208601611bd9565b601f01601f19169290920192915050565b602080825281016110508184611bfd565b60208101610ffa8284611890565b6117e08161178b565b60208101610ffa8284611c4e565b60008060408385031215611c7b57611c7b600080fd5b600061193e8585611864565b60006001600160401b03821115611ca057611ca0611a10565b601f19601f83011660200192915050565b82818337506000910152565b6000611ccb611a9a84611c87565b905082815260208101848484011115611ce657611ce6600080fd5b610cea848285611cb1565b600082601f830112611d0557611d05600080fd5b81356105ad848260208601611cbd565b600060208284031215611d2a57611d2a600080fd5b81356001600160401b03811115611d4357611d43600080fd5b6105ad84828501611cf1565b60008060008060408587031215611d6857611d68600080fd5b84356001600160401b03811115611d8157611d81600080fd5b611d8d87828801611b48565b945094505060208501356001600160401b03811115611dae57611dae600080fd5b611a0487828801611b48565b60278152602081017f4d61696c626f78436c69656e743a20696e76616c696420636f6e74726163742081526673657474696e6760c81b602082015290505b60400190565b60208082528101610aa581611dba565b8051610ffa8161179c565b600060208284031215611e2e57611e2e600080fd5b60006105ad8484611e0e565b602e8152602081017f496e697469616c697a61626c653a20636f6e747261637420697320616c72656181526d191e481a5b9a5d1a585b1a5e995960921b60208201529050611df8565b60208082528101610aa581611e3a565b600060ff8216610aa5565b6117e081611e93565b60208101610ffa8284611e9e565b60218152602081017f4d61696c626f78436c69656e743a2073656e646572206e6f74206d61696c626f8152600f60fb1b60208201529050611df8565b60208082528101610aa581611eb5565b60258152602081017f456e726f6c6c656420726f7574657220646f6573206e6f74206d61746368207381526432b73232b960d91b60208201529050611df8565b60208082528101610aa581611f01565b634e487b7160e01b600052601160045260246000fd5b600060018201611f7957611f79611f51565b5060010190565b80820180821115610ffa57610ffa611f51565b634e487b7160e01b600052603260045260246000fd5b60608101611fb78285611c4e565b611fc460208301846117f4565b818103604083015260008152602081016105ad565b634e487b7160e01b600052602260045260246000fd5b60028104600182168061200357607f821691505b60208210810361201557612015611fd9565b50919050565b600781526020810166042d8cadccee8d60cb1b815290506118ad565b60208082528101610aa58161201b565b60208082527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657291019081526118ad565b60208082528101610aa581612047565b6000610aa561181c8381565b61209c83612087565b815460001960089490940293841b1916921b91909117905550565b600061070b818484612093565b81811015610a81576120d76000826120b7565b6001016120c4565b601f82111561070b576000818152602090206020601f850104810160208510156121065750805b6107906020601f8601048301826120c4565b81516001600160401b0381111561213157612131611a10565b61213b8254611fef565b6121468282856120df565b506020601f82116001811461217b57600083156121635750848201515b600019600885021c1981166002850217855550610790565b600084815260208120601f198516915b828110156121ab578785015182556020948501946001909201910161218b565b50848210156121c85783870151600019601f87166008021c191681555b50505050600202600101905550565b60058110610b4b57600080fd5b8035610ffa816121d7565b60006060828403121561220457612204600080fd5b61220e6060611a52565b905081356001600160401b0381111561222957612229600080fd5b61223584828501611aea565b82525060208201356001600160401b0381111561225457612254600080fd5b61226084828501611cf1565b6020830152506040612274848285016121e4565b9082015292915050565b60006020828403121561229357612293600080fd5b81356001600160401b038111156122ac576122ac600080fd5b6105ad848285016121ef565b634e487b7160e01b600052602160045260246000fd5b8051610ffa81611858565b6000602082840312156122ee576122ee600080fd5b60006105ad84846122ce565b6118a68282611c4e565b600061230e825190565b808452602093840193830160005b828110156118f057815161233087826122fa565b96505060208201915060010161231c565b60058110610b4b57610b4b6122b8565b80610aa881612341565b6000610aa582612351565b6117e08161235b565b80516060808452600091908401906123878282612304565b9150506020830151848203602086015261