608060405234801561001057600080fd5b5061556c806100206000396000f3fe608060405234801561001057600080fd5b50600436106101fb5760003560e01c80638129fc1c1161011a578063ae3c3d8e116100ad578063d234b91a1161007c578063d234b91a14610587578063de8e7ae014610591578063e985e9c5146105ad578063f2fde38b146105dd578063f3618f05146105f9576101fb565b8063ae3c3d8e14610515578063b88d4fde1461051f578063bf2ebb961461053b578063c87b56dd14610557576101fb565b806396fdf523116100e957806396fdf5231461048f5780639c8afbb6146104ab578063a22cb465146104c9578063ab8ece8b146104e5576101fb565b80638129fc1c1461042d5780638da5cb5b146104375780638f2fc60b1461045557806395d89b4114610471576101fb565b80632f745c59116101925780636352211e116101615780636352211e146103a757806367243482146103d757806370a08231146103f3578063715018a614610423576101fb565b80632f745c59146103215780633ccfd60b1461035157806342842e0e1461035b5780634f6ccce714610377576101fb565b8063095ea7b3116101ce578063095ea7b31461029a57806318160ddd146102b657806323b872dd146102d45780632a55205a146102f0576101fb565b806301ffc9a71461020057806304634d8d1461023057806306fdde031461024c578063081812fc1461026a575b600080fd5b61021a6004803603810190610215919061343d565b610603565b6040516102279190613485565b60405180910390f35b61024a60048036038101906102459190613542565b610615565b005b61025461062b565b6040516102619190613612565b60405180910390f35b610284600480360381019061027f919061366a565b6106bd565b60405161029191906136a6565b60405180910390f35b6102b460048036038101906102af91906136c1565b610742565b005b6102be610777565b6040516102cb9190613710565b60405180910390f35b6102ee60048036038101906102e9919061372b565b610793565b005b61030a6004803603810190610305919061377e565b6107fe565b6040516103189291906137be565b60405180910390f35b61033b600480360381019061033691906136c1565b6109e8565b6040516103489190613710565b60405180910390f35b610359610aba565b005b6103756004803603810190610370919061372b565b610b0b565b005b610391600480360381019061038c919061366a565b610b76565b60405161039e9190613710565b60405180910390f35b6103c160048036038101906103bc919061366a565b610c18565b6040516103ce91906136a6565b60405180910390f35b6103f160048036038101906103ec91906138a2565b610c30565b005b61040d60048036038101906104089190613923565b610ca8565b60405161041a9190613710565b60405180910390f35b61042b610d98565b005b610435610dac565b005b61043f610f9c565b60405161044c91906136a6565b60405180910390f35b61046f600480360381019061046a9190613542565b610fc6565b005b610479610fdc565b6040516104869190613612565b60405180910390f35b6104a960048036038101906104a4919061398e565b61106e565b005b6104b36110ba565b6040516104c09190613a1a565b60405180910390f35b6104e360048036038101906104de9190613a61565b6110e0565b005b6104ff60048036038101906104fa919061366a565b611115565b60405161050c9190613710565b60405180910390f35b61051d61118b565b005b61053960048036038101906105349190613bd1565b6111bf565b005b6105556004803603810190610550919061366a565b61122c565b005b610571600480360381019061056c919061366a565b6113ea565b60405161057e9190613612565b60405180910390f35b61058f611491565b005b6105ab60048036038101906105a69190613c76565b6114c5565b005b6105c760048036038101906105c29190613cb6565b611874565b6040516105d49190613485565b60405180910390f35b6105f760048036038101906105f29190613923565b611908565b005b61060161198b565b005b600061060e826119bd565b9050919050565b61061d611b07565b6106278282611b85565b5050565b606060ca805461063a90613d25565b80601f016020809104026020016040519081016040528092919081815260200182805461066690613d25565b80156106b35780601f10610688576101008083540402835291602001916106b3565b820191906000526020600020905b81548152906001019060200180831161069657829003601f168201915b5050505050905090565b60006106c882611d1a565b610707576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106fe90613dc8565b60405180910390fd5b60ce600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b8161074c81611d4f565b61076857610758611d56565b156107675761076681611d5f565b5b5b6107728383611da3565b505050565b6000610781611eba565b60cd5461078e9190613e17565b905090565b823373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146107ed576107d033611d4f565b6107ec576107dc611d56565b156107eb576107ea33611d5f565b5b5b5b6107f8848484611f24565b50505050565b6000806000606660008681526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16036109935760656040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff168152505090505b600061099d611f84565b6bffffffffffffffffffffffff1682602001516bffffffffffffffffffffffff16866109c99190613e4b565b6109d39190613ed4565b90508160000151819350935050509250929050565b60008060005b60cd54811015610a7857610a0181611d1a565b8015610a405750610a1181610c18565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b15610a6557838203610a56578092505050610ab4565b8180610a6190613f05565b9250505b8080610a7090613f05565b9150506109ee565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aab90613fbf565b60405180910390fd5b92915050565b610ac2611b07565b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610b08573d6000803e3d6000fd5b50565b823373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610b6557610b4833611d4f565b610b6457610b54611d56565b15610b6357610b6233611d5f565b5b5b5b610b70848484611f8e565b50505050565b6000610b80610777565b8210610bc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb890614051565b60405180910390fd5b6000805b60cd54811015610c1057610bd881611d1a565b15610bfd57838203610bee578092505050610c13565b8180610bf990613f05565b9250505b8080610c0890613f05565b915050610bc5565b50505b919050565b600080610c2483611fae565b50905080915050919050565b610c38611b07565b600084849050905060005b81811015610ca057610c95868683818110610c6157610c60614071565b5b9050602002016020810190610c769190613923565b858584818110610c8957610c88614071565b5b9050602002013561203f565b806001019050610c43565b505050505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0f90614112565b60405180910390fd5b6000805b60cd54811015610d8e57610d2f81611d1a565b15610d7d57610d3d81610c18565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610d7c5781610d7990613f05565b91505b5b80610d8790613f05565b9050610d1c565b5080915050919050565b610da0611b07565b610daa600061221f565b565b60008060019054906101000a900460ff16159050808015610ddd5750600160008054906101000a900460ff1660ff16105b80610e0a5750610dec306122e5565b158015610e095750600160008054906101000a900460ff1660ff16145b5b610e49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e40906141a4565b60405180910390fd5b60016000806101000a81548160ff021916908360ff1602179055508015610e86576001600060016101000a81548160ff0219169083151502179055505b610efa6040518060400160405280601081526020017f4e2e542e502e2043616e697374657273000000000000000000000000000000008152506040518060400160405280600981526020017f43414e4953544552530000000000000000000000000000000000000000000000815250612308565b610f02612365565b610f0a6123b6565b600160d260016101000a81548160ff021916908315150217905550600060d260006101000a81548160ff0219169083151502179055508015610f995760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051610f90919061420c565b60405180910390a15b50565b6000609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610fce611b07565b610fd88282611b85565b5050565b606060cb8054610feb90613d25565b80601f016020809104026020016040519081016040528092919081815260200182805461101790613d25565b80156110645780601f1061103957610100808354040283529160200191611064565b820191906000526020600020905b81548152906001019060200180831161104757829003601f168201915b5050505050905090565b611076611b07565b8060d260026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60d260029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b816110ea81611d4f565b611106576110f6611d56565b156111055761110481611d5f565b5b5b611110838361240f565b505050565b600061112082611d1a565b61115f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115690614273565b60405180910390fd5b6111738260d161258f90919063ffffffff16565b156111815760029050611186565b600190505b919050565b611193611b07565b60d260019054906101000a900460ff161560d260016101000a81548160ff021916908315150217905550565b833373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611219576111fc33611d4f565b61121857611208611d56565b156112175761121633611d5f565b5b5b5b611225858585856125cb565b5050505050565b60d260009054906101000a900460ff1661127b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611272906142df565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff1661129b82610c18565b73ffffffffffffffffffffffffffffffffffffffff16146112f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e89061434b565b60405180910390fd5b60026112fc82611115565b1461133c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611333906143b7565b60405180910390fd5b6113458161262d565b60d260029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f1c385e93360016040518363ffffffff1660e01b81526004016113a3929190614408565b6020604051808303816000875af11580156113c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e69190614446565b5050565b60606113f582611d1a565b611434576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142b906144e5565b60405180910390fd5b600061143e6126ca565b9050600081511161145e5760405180602001604052806000815250611489565b80611468846126ea565b604051602001611479929190614541565b6040516020818303038152906040525b915050919050565b611499611b07565b60d260009054906101000a900460ff161560d260006101000a81548160ff021916908315150217905550565b60d260019054906101000a900460ff16611514576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150b906142df565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff1661153483610c18565b73ffffffffffffffffffffffffffffffffffffffff161461158a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611581906145b1565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166115c2826000600281106115b8576115b7614071565b5b6020020135610c18565b73ffffffffffffffffffffffffffffffffffffffff1614611618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160f9061461d565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166116508260016002811061164657611645614071565b5b6020020135610c18565b73ffffffffffffffffffffffffffffffffffffffff16146116a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169d9061461d565b60405180910390fd5b81816000600281106116bb576116ba614071565b5b6020020135036116ca57600080fd5b81816001600281106116df576116de614071565b5b6020020135036116ee57600080fd5b6117028260d161258f90919063ffffffff16565b15611742576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173990614689565b60405180910390fd5b61176e8160006002811061175957611758614071565b5b602002013560d161258f90919063ffffffff16565b156117ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a5906146f5565b60405180910390fd5b6117da816001600281106117c5576117c4614071565b5b602002013560d161258f90919063ffffffff16565b1561181a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611811906146f5565b60405180910390fd5b61183b8160006002811061183157611830614071565b5b602002013561262d565b61185c8160016002811061185257611851614071565b5b602002013561262d565b6118708260d161284a90919063ffffffff16565b5050565b600060cf60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611910611b07565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361197f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197690614787565b60405180910390fd5b6119888161221f565b50565b611993611b07565b6119b373f04ee8223974f933184da78532837b62fc0893846102ee611b85565b6119bb612888565b565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611a8857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611af057507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611b005750611aff826128a9565b5b9050919050565b611b0f612923565b73ffffffffffffffffffffffffffffffffffffffff16611b2d610f9c565b73ffffffffffffffffffffffffffffffffffffffff1614611b83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7a906147f3565b60405180910390fd5b565b611b8d611f84565b6bffffffffffffffffffffffff16816bffffffffffffffffffffffff161115611beb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be290614885565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c51906148f1565b60405180910390fd5b60405180604001604052808373ffffffffffffffffffffffffffffffffffffffff168152602001826bffffffffffffffffffffffff16815250606560008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055509050505050565b6000611d308260d061292b90919063ffffffff16565b15611d3e5760009050611d4a565b611d4782612986565b90505b919050565b6000919050565b60006001905090565b69c617113400112233445560005230601a5280603a52600080604460166daaeb6d7670e522a718067333cd4e5afa611d9b573d6000803e3d6000fd5b6000603a5250565b6000611dae82610c18565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611e1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1590614983565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16611e3d612923565b73ffffffffffffffffffffffffffffffffffffffff161480611e6c5750611e6b81611e66612923565b611874565b5b611eab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea290614a15565b60405180910390fd5b611eb58383612994565b505050565b6000806001600860cd54901c611ed09190614a35565b905060005b81811015611f1f576000611ef38260d0612a4d90919063ffffffff16565b9050611efe81612a6d565b84611f099190614a35565b9350508080611f1790613f05565b915050611ed5565b505090565b611f35611f2f612923565b82612a92565b611f74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6b90614adb565b60405180910390fd5b611f7f838383612b70565b505050565b6000612710905090565b611fa9838383604051806020016040528060008152506111bf565b505050565b600080611fba83611d1a565b611ff9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff090614b6d565b60405180910390fd5b61200283612df2565b905060cc600082815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169150915091565b600060cd54905060008211612089576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208090614bff565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036120f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ef90614c91565b60405180910390fd5b6121056000848385612e0f565b8160cd60008282546121179190614a35565b925050819055508260cc600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506121848160c9612e1590919063ffffffff16565b6121916000848385612e72565b60008190505b82826121a39190614a35565b81101561221957808473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808061221190613f05565b915050612197565b50505050565b6000609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081609760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600060019054906101000a900460ff16612357576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234e90614d23565b60405180910390fd5b6123618282612e78565b5050565b600060019054906101000a900460ff166123b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ab90614d23565b60405180910390fd5b565b600060019054906101000a900460ff16612405576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123fc90614d23565b60405180910390fd5b61240d612eeb565b565b612417612923565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612484576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247b90614d8f565b60405180910390fd5b8060cf6000612491612923565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661253e612923565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516125839190613485565b60405180910390a35050565b600080600883901c9050600060ff84166001901b9050600081866000016000858152602001908152602001600020541614159250505092915050565b6125dc6125d6612923565b83612a92565b61261b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261290614adb565b60405180910390fd5b61262784848484612f4c565b50505050565b600061263882610c18565b9050612648816000846001612e0f565b61265c8260d0612e1590919063ffffffff16565b81600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46126c6816000846001612e72565b5050565b606060405180606001604052806025815260200161541260259139905090565b606060008203612731576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612845565b600082905060005b6000821461276357808061274c90613f05565b915050600a8261275c9190613ed4565b9150612739565b60008167ffffffffffffffff81111561277f5761277e613aa6565b5b6040519080825280601f01601f1916602001820160405280156127b15781602001600182028036833780820191505090505b5090505b6000851461283e576001826127ca9190613e17565b9150600a856127d99190614daf565b60306127e59190614a35565b60f81b8183815181106127fb576127fa614071565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856128379190613ed4565b94506127b5565b8093505050505b919050565b6000600882901c9050600060ff83166001901b9050808460000160008481526020019081526020016000206000828254179250508190555050505050565b6128a7733cc6cdda760b79bafa08df41ecfa224f810dceb66001612faa565b565b60007f2a55205a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061291c575061291b8261301f565b5b9050919050565b600033905090565b600080600883901c9050600060ff84167f8000000000000000000000000000000000000000000000000000000000000000901c9050600081866000016000858152602001908152602001600020541614159250505092915050565b600060cd5482109050919050565b8160ce600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612a0783610c18565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600082600001600083815260200190815260200160002054905092915050565b60005b60008214612a8d5760018203821691508080600101915050612a70565b919050565b6000612a9d82611d1a565b612adc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ad390614e52565b60405180910390fd5b6000612ae783610c18565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612b5657508373ffffffffffffffffffffffffffffffffffffffff16612b3e846106bd565b73ffffffffffffffffffffffffffffffffffffffff16145b80612b675750612b668185611874565b5b91505092915050565b600080612b7c83611fae565b915091508473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612bee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612be590614ee4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612c5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c5490614f76565b60405180910390fd5b612c6a8585856001612e0f565b612c75600084612994565b6000600184612c849190614a35565b9050612c9a8160c961292b90919063ffffffff16565b158015612ca8575060cd5481105b15612d14578560cc600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550612d138160c9612e1590919063ffffffff16565b5b8460cc600086815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818414612d8257612d818460c9612e1590919063ffffffff16565b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612dea8686866001612e72565b505050505050565b6000612e088260c961308990919063ffffffff16565b9050919050565b50505050565b6000600882901c9050600060ff83167f8000000000000000000000000000000000000000000000000000000000000000901c9050808460000160008481526020019081526020016000206000828254179250508190555050505050565b50505050565b600060019054906101000a900460ff16612ec7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ebe90614d23565b60405180910390fd5b8160ca9081612ed69190615138565b508060cb9081612ee69190615138565b505050565b600060019054906101000a900460ff16612f3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f3190614d23565b60405180910390fd5b612f4a612f45612923565b61221f565b565b612f57848484612b70565b612f65848484600185613182565b612fa4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f9b9061527c565b60405180910390fd5b50505050565b637d3e3dbe8260601b60601c925081612fd65782612fce57634420e4869050612fd6565b63a0af290390505b8060e01b60005230600452826024526004600060446000806daaeb6d7670e522a718067333cd4e5af1613015578060005160e01c0361301457600080fd5b5b6000602452505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600080600883901c9050600060ff8416905060008560000160008481526020019081526020016000205490508160ff1881901c905060008111156130e2576130d081613344565b60ff168203600884901b179350613179565b5b600115613178576000831161312d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131249061530e565b60405180910390fd5b82806001900393505085600001600084815260200190815260200160002054905060008111156131735761316081613344565b60ff0360ff16600884901b179350613178565b6130e3565b5b50505092915050565b60006131a38573ffffffffffffffffffffffffffffffffffffffff166122e5565b15613336576001905060008490505b83856131be9190614a35565b811015613330578573ffffffffffffffffffffffffffffffffffffffff1663150b7a026131e9612923565b8984876040518563ffffffff1660e01b815260040161320b9493929190615383565b6020604051808303816000875af192505050801561324757506040513d601f19601f8201168201806040525081019061324491906153e4565b60015b6132c9573d8060008114613277576040519150601f19603f3d011682016040523d82523d6000602084013e61327c565b606091505b5060008151036132c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132b89061527c565b60405180910390fd5b805181602001fd5b82801561331a575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b925050808061332890613f05565b9150506131b2565b5061333b565b600190505b95945050505050565b60006040518061012001604052806101008152602001615437610100913960f87e818283848586878898a8b8c8d8e8f929395969799a9b9d9e9faaeb6bedeeff61338d856133b6565b02901c815181106133a1576133a0614071565b5b602001015160f81c60f81b60f81c9050919050565b60008082116133c457600080fd5b8160000382169050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61341a816133e5565b811461342557600080fd5b50565b60008135905061343781613411565b92915050565b600060208284031215613453576134526133db565b5b600061346184828501613428565b91505092915050565b60008115159050919050565b61347f8161346a565b82525050565b600060208201905061349a6000830184613476565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006134cb826134a0565b9050919050565b6134db816134c0565b81146134e657600080fd5b50565b6000813590506134f8816134d2565b92915050565b60006bffffffffffffffffffffffff82169050919050565b61351f816134fe565b811461352a57600080fd5b50565b60008135905061353c81613516565b92915050565b60008060408385031215613559576135586133db565b5b6000613567858286016134e9565b92505060206135788582860161352d565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b838110156135bc5780820151818401526020810190506135a1565b60008484015250505050565b6000601f19601f8301169050919050565b60006135e482613582565b6135ee818561358d565b93506135fe81856020860161359e565b613607816135c8565b840191505092915050565b6000602082019050818103600083015261362c81846135d9565b905092915050565b6000819050919050565b61364781613634565b811461365257600080fd5b50565b6000813590506136648161363e565b92915050565b6000602082840312156136805761367f6133db565b5b600061368e84828501613655565b91505092915050565b6136a0816134c0565b82525050565b60006020820190506136bb6000830184613697565b92915050565b600080604083850312156136d8576136d76133db565b5b60006136e6858286016134e9565b92505060206136f785828601613655565b9150509250929050565b61370a81613634565b82525050565b60006020820190506137256000830184613701565b92915050565b600080600060608486031215613744576137436133db565b5b6000613752868287016134e9565b9350506020613763868287016134e9565b925050604061377486828701613655565b9150509250925092565b60008060408385031215613795576137946133db565b5b60006137a385828601613655565b92505060206137b485828601613655565b9150509250929050565b60006040820190506137d36000830185613697565b6137e06020830184613701565b9392505050565b600080fd5b600080fd5b600080fd5b60008083601f84011261380c5761380b6137e7565b5b8235905067ffffffffffffffff811115613829576138286137ec565b5b602083019150836020820283011115613845576138446137f1565b5b9250929050565b60008083601f840112613862576138616137e7565b5b8235905067ffffffffffffffff81111561387f5761387e6137ec565b5b60208301915083602082028301111561389b5761389a6137f1565b5b9250929050565b600080600080604085870312156138bc576138bb6133db565b5b600085013567ffffffffffffffff8111156138da576138d96133e0565b5b6138e6878288016137f6565b9450945050602085013567ffffffffffffffff811115613909576139086133e0565b5b6139158782880161384c565b925092505092959194509250565b600060208284031215613939576139386133db565b5b6000613947848285016134e9565b91505092915050565b600061395b826134c0565b9050919050565b61396b81613950565b811461397657600080fd5b50565b60008135905061398881613962565b92915050565b6000602082840312156139a4576139a36133db565b5b60006139b284828501613979565b91505092915050565b6000819050919050565b60006139e06139db6139d6846134a0565b6139bb565b6134a0565b9050919050565b60006139f2826139c5565b9050919050565b6000613a04826139e7565b9050919050565b613a14816139f9565b82525050565b6000602082019050613a2f6000830184613a0b565b92915050565b613a3e8161346a565b8114613a4957600080fd5b50565b600081359050613a5b81613a35565b92915050565b60008060408385031215613a7857613a776133db565b5b6000613a86858286016134e9565b9250506020613a9785828601613a4c565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613ade826135c8565b810181811067ffffffffffffffff82111715613afd57613afc613aa6565b5b80604052505050565b6000613b106133d1565b9050613b1c8282613ad5565b919050565b600067ffffffffffffffff821115613b3c57613b3b613aa6565b5b613b45826135c8565b9050602081019050919050565b82818337600083830152505050565b6000613b74613b6f84613b21565b613b06565b905082815260208101848484011115613b9057613b8f613aa1565b5b613b9b848285613b52565b509392505050565b600082601f830112613bb857613bb76137e7565b5b8135613bc8848260208601613b61565b91505092915050565b60008060008060808587031215613beb57613bea6133db565b5b6000613bf9878288016134e9565b9450506020613c0a878288016134e9565b9350506040613c1b87828801613655565b925050606085013567ffffffffffffffff811115613c3c57613c3b6133e0565b5b613c4887828801613ba3565b91505092959194509250565b600081905082602060020282011115613c7057613c6f6137f1565b5b92915050565b60008060608385031215613c8d57613c8c6133db565b5b6000613c9b85828601613655565b9250506020613cac85828601613c54565b9150509250929050565b60008060408385031215613ccd57613ccc6133db565b5b6000613cdb858286016134e9565b9250506020613cec858286016134e9565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613d3d57607f821691505b602082108103613d5057613d4f613cf6565b5b50919050565b7f4552433732315073693a20617070726f76656420717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000613db2602f8361358d565b9150613dbd82613d56565b604082019050919050565b60006020820190508181036000830152613de181613da5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613e2282613634565b9150613e2d83613634565b9250828203905081811115613e4557613e44613de8565b5b92915050565b6000613e5682613634565b9150613e6183613634565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613e9a57613e99613de8565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613edf82613634565b9150613eea83613634565b925082613efa57613ef9613ea5565b5b828204905092915050565b6000613f1082613634565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613f4257613f41613de8565b5b600182019050919050565b7f4552433732315073693a206f776e657220696e646578206f7574206f6620626f60008201527f756e647300000000000000000000000000000000000000000000000000000000602082015250565b6000613fa960248361358d565b9150613fb482613f4d565b604082019050919050565b60006020820190508181036000830152613fd881613f9c565b9050919050565b7f4552433732315073693a20676c6f62616c20696e646578206f7574206f66206260008201527f6f756e6473000000000000000000000000000000000000000000000000000000602082015250565b600061403b60258361358d565b915061404682613fdf565b604082019050919050565b6000602082019050818103600083015261406a8161402e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4552433732315073693a2062616c616e636520717565727920666f722074686560008201527f207a65726f206164647265737300000000000000000000000000000000000000602082015250565b60006140fc602d8361358d565b9150614107826140a0565b604082019050919050565b6000602082019050818103600083015261412b816140ef565b9050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b600061418e602e8361358d565b915061419982614132565b604082019050919050565b600060208201905081810360008301526141bd81614181565b9050919050565b6000819050919050565b600060ff82169050919050565b60006141f66141f16141ec846141c4565b6139bb565b6141ce565b9050919050565b614206816141db565b82525050565b600060208201905061422160008301846141fd565b92915050565b7f4e6f6e6578697374616e7420746f6b656e496421000000000000000000000000600082015250565b600061425d60148361358d565b915061426882614227565b602082019050919050565b6000602082019050818103600083015261428c81614250565b9050919050565b7f4e6f7420656e61626c6564207965742100000000000000000000000000000000600082015250565b60006142c960108361358d565b91506142d482614293565b602082019050919050565b600060208201905081810360008301526142f8816142bc565b9050919050565b7f4e6f7420746865206f776e657221000000000000000000000000000000000000600082015250565b6000614335600e8361358d565b9150614340826142ff565b602082019050919050565b6000602082019050818103600083015261436481614328565b9050919050565b7f4e6f742061207375706572210000000000000000000000000000000000000000600082015250565b60006143a1600c8361358d565b91506143ac8261436b565b602082019050919050565b600060208201905081810360008301526143d081614394565b9050919050565b60006143f26143ed6143e8846141c4565b6139bb565b613634565b9050919050565b614402816143d7565b82525050565b600060408201905061441d6000830185613697565b61442a60208301846143f9565b9392505050565b6000815190506144408161363e565b92915050565b60006020828403121561445c5761445b6133db565b5b600061446a84828501614431565b91505092915050565b7f4552433732315073693a2055524920717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b60006144cf602a8361358d565b91506144da82614473565b604082019050919050565b600060208201905081810360008301526144fe816144c2565b9050919050565b600081905092915050565b600061451b82613582565b6145258185614505565b935061453581856020860161359e565b80840191505092915050565b600061454d8285614510565b91506145598284614510565b91508190509392505050565b7f4e6f74204e4654204f776e657220666f72207468652062617365210000000000600082015250565b600061459b601b8361358d565b91506145a682614565565b602082019050919050565b600060208201905081810360008301526145ca8161458e565b9050919050565b7f4e6f74204e4654204f776e657220666f72207468652063616e69737465727321600082015250565b600061460760208361358d565b9150614612826145d1565b602082019050919050565b60006020820190508181036000830152614636816145fa565b9050919050565b7f416c726561647920757067726164656400000000000000000000000000000000600082015250565b600061467360108361358d565b915061467e8261463d565b602082019050919050565b600060208201905081810360008301526146a281614666565b9050919050565b7f5573696e67207570677261646564000000000000000000000000000000000000600082015250565b60006146df600e8361358d565b91506146ea826146a9565b602082019050919050565b6000602082019050818103600083015261470e816146d2565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061477160268361358d565b915061477c82614715565b604082019050919050565b600060208201905081810360008301526147a081614764565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006147dd60208361358d565b91506147e8826147a7565b602082019050919050565b6000602082019050818103600083015261480c816147d0565b9050919050565b7f455243323938313a20726f79616c7479206665652077696c6c2065786365656460008201527f2073616c65507269636500000000000000000000000000000000000000000000602082015250565b600061486f602a8361358d565b915061487a82614813565b604082019050919050565b6000602082019050818103600083015261489e81614862565b9050919050565b7f455243323938313a20696e76616c696420726563656976657200000000000000600082015250565b60006148db60198361358d565b91506148e6826148a5565b602082019050919050565b6000602082019050818103600083015261490a816148ce565b9050919050565b7f4552433732315073693a20617070726f76616c20746f2063757272656e74206f60008201527f776e657200000000000000000000000000000000000000000000000000000000602082015250565b600061496d60248361358d565b915061497882614911565b604082019050919050565b6000602082019050818103600083015261499c81614960565b9050919050565b7f4552433732315073693a20617070726f76652063616c6c6572206973206e6f7460008201527f206f776e6572206e6f7220617070726f76656420666f7220616c6c0000000000602082015250565b60006149ff603b8361358d565b9150614a0a826149a3565b604082019050919050565b60006020820190508181036000830152614a2e816149f2565b9050919050565b6000614a4082613634565b9150614a4b83613634565b9250828201905080821115614a6357614a62613de8565b5b92915050565b7f4552433732315073693a207472616e736665722063616c6c6572206973206e6f60008201527f74206f776e6572206e6f7220617070726f766564000000000000000000000000602082015250565b6000614ac560348361358d565b9150614ad082614a69565b604082019050919050565b60006020820190508181036000830152614af481614ab8565b9050919050565b7f4552433732315073693a206f776e657220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000614b57602c8361358d565b9150614b6282614afb565b604082019050919050565b60006020820190508181036000830152614b8681614b4a565b9050919050565b7f4552433732315073693a207175616e74697479206d757374206265206772656160008201527f7465722030000000000000000000000000000000000000000000000000000000602082015250565b6000614be960258361358d565b9150614bf482614b8d565b604082019050919050565b60006020820190508181036000830152614c1881614bdc565b9050919050565b7f4552433732315073693a206d696e7420746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614c7b60238361358d565b9150614c8682614c1f565b604082019050919050565b60006020820190508181036000830152614caa81614c6e565b9050919050565b7f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960008201527f6e697469616c697a696e67000000000000000000000000000000000000000000602082015250565b6000614d0d602b8361358d565b9150614d1882614cb1565b604082019050919050565b60006020820190508181036000830152614d3c81614d00565b9050919050565b7f4552433732315073693a20617070726f766520746f2063616c6c657200000000600082015250565b6000614d79601c8361358d565b9150614d8482614d43565b602082019050919050565b60006020820190508181036000830152614da881614d6c565b9050919050565b6000614dba82613634565b9150614dc583613634565b925082614dd557614dd4613ea5565b5b828206905092915050565b7f4552433732315073693a206f70657261746f7220717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614e3c602f8361358d565b9150614e4782614de0565b604082019050919050565b60006020820190508181036000830152614e6b81614e2f565b9050919050565b7f4552433732315073693a207472616e73666572206f6620746f6b656e2074686160008201527f74206973206e6f74206f776e0000000000000000000000000000000000000000602082015250565b6000614ece602c8361358d565b9150614ed982614e72565b604082019050919050565b60006020820190508181036000830152614efd81614ec1565b9050919050565b7f4552433732315073693a207472616e7366657220746f20746865207a65726f2060008201527f6164647265737300000000000000000000000000000000000000000000000000602082015250565b6000614f6060278361358d565b9150614f6b82614f04565b604082019050919050565b60006020820190508181036000830152614f8f81614f53565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302614ff87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82614fbb565b6150028683614fbb565b95508019841693508086168417925050509392505050565b600061503561503061502b84613634565b6139bb565b613634565b9050919050565b6000819050919050565b61504f8361501a565b61506361505b8261503c565b848454614fc8565b825550505050565b600090565b61507861506b565b615083818484615046565b505050565b5b818110156150a75761509c600082615070565b600181019050615089565b5050565b601f8211156150ec576150bd81614f96565b6150c684614fab565b810160208510156150d5578190505b6150e96150e185614fab565b830182615088565b50505b505050565b600082821c905092915050565b600061510f600019846008026150f1565b1980831691505092915050565b600061512883836150fe565b9150826002028217905092915050565b61514182613582565b67ffffffffffffffff81111561515a57615159613aa6565b5b6151648254613d25565b61516f8282856150ab565b600060209050601f8311600181146151a25760008415615190578287015190505b61519a858261511c565b865550615202565b601f1984166151b086614f96565b60005b828110156151d8578489015182556001820191506020850194506020810190506151b3565b868310156151f557848901516151f1601f8916826150fe565b8355505b6001600288020188555050505b505050505050565b7f4552433732315073693a207472616e7366657220746f206e6f6e20455243373260008201527f31526563656976657220696d706c656d656e7465720000000000000000000000602082015250565b600061526660358361358d565b91506152718261520a565b604082019050919050565b6000602082019050818103600083015261529581615259565b9050919050565b7f4269744d6170733a205468652073657420626974206265666f7265207468652060008201527f696e64657820646f65736e27742065786973742e000000000000000000000000602082015250565b60006152f860348361358d565b91506153038261529c565b604082019050919050565b60006020820190508181036000830152615327816152eb565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006153558261532e565b61535f8185615339565b935061536f81856020860161359e565b615378816135c8565b840191505092915050565b60006080820190506153986000830187613697565b6153a56020830186613697565b6153b26040830185613701565b81810360608301526153c4818461534a565b905095945050505050565b6000815190506153de81613411565b92915050565b6000602082840312156153fa576153f96133db565b5b6000615408848285016153cf565b9150509291505056fe68747470733a2f2f6e747063616e6973746572732e6e66746170692e6172742f6d6574612f0001020903110a19042112290b311a3905412245134d2a550c5d32651b6d3a7506264262237d468514804e8d2b95569d0d495ea533a966b11c886eb93bc176c9071727374353637324837e9b47af86c7155181ad4fd18ed32c9096db57d59ee30e2e4a6a5f92a6be3498aae067ddb2eb1d5989b56fd7baf33ca0c2ee77e5caf7ff0810182028303840444c545c646c7425617c847f8c949c48a4a8b087b8c0c816365272829aaec650acd0d28fdad4e22d6991bd97dfdcea58b4d6f29fede4f6fe0f1f2f3f4b5b6b607b8b93a3a7b7bf357199c5abcfd9e168bcdee9b3f1ecf5fd1e3e5a7a8aa2b670c4ced8bbe8f0f4fc3d79a1c3cde7effb78cce6facbf9f8a26469706673582212200ee70405b0ded611ce9aead8ecefe0f90f5ab6bb72a54e183f46b3859d6e2fba64736f6c63430008100033