6080604052611388600b553480156200001757600080fd5b50604051620055663803806200556683398181016040528101906200003d9190620003a8565b6040518060400160405280600b81526020017f354b4d20536e65616b65720000000000000000000000000000000000000000008152506040518060400160405280600a81526020017f354b4d536e65616b6572000000000000000000000000000000000000000000008152508160029080519060200190620000c192919062000258565b508060039080519060200190620000da92919062000258565b50620000eb6200018560201b60201c565b600081905550505062000113620001076200018a60201b60201c565b6200019260201b60201c565b83600990805190602001906200012b92919062000258565b5082600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600c8190555080600d81905550505050506200060f565b600090565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002669062000500565b90600052602060002090601f0160209004810192826200028a5760008555620002d6565b82601f10620002a557805160ff1916838001178555620002d6565b82800160010185558215620002d6579182015b82811115620002d5578251825591602001919060010190620002b8565b5b509050620002e59190620002e9565b5090565b5b8082111562000304576000816000905550600101620002ea565b5090565b60006200031f620003198462000456565b6200042d565b9050828152602081018484840111156200033857600080fd5b62000345848285620004ca565b509392505050565b6000815190506200035e81620005db565b92915050565b600082601f8301126200037657600080fd5b81516200038884826020860162000308565b91505092915050565b600081519050620003a281620005f5565b92915050565b60008060008060808587031215620003bf57600080fd5b600085015167ffffffffffffffff811115620003da57600080fd5b620003e88782880162000364565b9450506020620003fb878288016200034d565b93505060406200040e8782880162000391565b9250506060620004218782880162000391565b91505092959194509250565b6000620004396200044c565b905062000447828262000536565b919050565b6000604051905090565b600067ffffffffffffffff8211156200047457620004736200059b565b5b6200047f82620005ca565b9050602081019050919050565b60006200049982620004a0565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b83811015620004ea578082015181840152602081019050620004cd565b83811115620004fa576000848401525b50505050565b600060028204905060018216806200051957607f821691505b6020821081141562000530576200052f6200056c565b5b50919050565b6200054182620005ca565b810181811067ffffffffffffffff821117156200056357620005626200059b565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b620005e6816200048c565b8114620005f257600080fd5b50565b6200060081620004c0565b81146200060c57600080fd5b50565b614f47806200061f6000396000f3fe6080604052600436106101ee5760003560e01c80636c0360eb1161010d578063ad4e3d9f116100a0578063d49930fe1161006f578063d49930fe146106b9578063dc33e681146106e4578063e985e9c514610721578063f0292a031461075e578063f2fde38b14610789576101ee565b8063ad4e3d9f1461060e578063b88d4fde14610637578063c87b56dd14610660578063d00e3a531461069d576101ee565b80638da5cb5b116100dc5780638da5cb5b1461057357806395d89b411461059e578063a0712d68146105c9578063a22cb465146105e5576101ee565b80636c0360eb146104cb5780636c19e783146104f657806370a082311461051f578063715018a61461055c576101ee565b80632e49d78b1161018557806355f804b31161015457806355f804b3146104115780635c0656001461043a5780636352211e146104655780636a054250146104a2576101ee565b80632e49d78b1461037d5780633ccfd60b146103a657806342842e0e146103bd57806348675f5a146103e6576101ee565b80631015805b116101c15780631015805b146102c157806318160ddd146102fe578063200d2ed21461032957806323b872dd14610354576101ee565b806301ffc9a7146101f357806306fdde0314610230578063081812fc1461025b578063095ea7b314610298575b600080fd5b3480156101ff57600080fd5b5061021a60048036038101906102159190613ba0565b6107b2565b60405161022791906142c4565b60405180910390f35b34801561023c57600080fd5b50610245610894565b6040516102529190614363565b60405180910390f35b34801561026757600080fd5b50610282600480360381019061027d9190613c60565b610926565b60405161028f9190614234565b60405180910390f35b3480156102a457600080fd5b506102bf60048036038101906102ba9190613b64565b6109a2565b005b3480156102cd57600080fd5b506102e860048036038101906102e391906139f9565b610aad565b6040516102f591906142c4565b60405180910390f35b34801561030a57600080fd5b50610313610acd565b60405161032091906145c5565b60405180910390f35b34801561033557600080fd5b5061033e610ae4565b60405161034b9190614324565b60405180910390f35b34801561036057600080fd5b5061037b60048036038101906103769190613a5e565b610af7565b005b34801561038957600080fd5b506103a4600480360381019061039f9190613bf2565b610b07565b005b3480156103b257600080fd5b506103bb610c0d565b005b3480156103c957600080fd5b506103e460048036038101906103df9190613a5e565b610d88565b005b3480156103f257600080fd5b506103fb610da8565b60405161040891906145c5565b60405180910390f35b34801561041d57600080fd5b5061043860048036038101906104339190613c1b565b610dae565b005b34801561044657600080fd5b5061044f610e79565b60405161045c91906145c5565b60405180910390f35b34801561047157600080fd5b5061048c60048036038101906104879190613c60565b610e7f565b6040516104999190614234565b60405180910390f35b3480156104ae57600080fd5b506104c960048036038101906104c49190613d12565b610e95565b005b3480156104d757600080fd5b506104e0610f2b565b6040516104ed9190614363565b60405180910390f35b34801561050257600080fd5b5061051d600480360381019061051891906139f9565b610fb9565b005b34801561052b57600080fd5b50610546600480360381019061054191906139f9565b6110b0565b60405161055391906145c5565b60405180910390f35b34801561056857600080fd5b50610571611180565b005b34801561057f57600080fd5b50610588611208565b6040516105959190614234565b60405180910390f35b3480156105aa57600080fd5b506105b3611232565b6040516105c09190614363565b60405180910390f35b6105e360048036038101906105de9190613c60565b6112c4565b005b3480156105f157600080fd5b5061060c60048036038101906106079190613b28565b6115e3565b005b34801561061a57600080fd5b5061063560048036038101906106309190613b64565b61175b565b005b34801561064357600080fd5b5061065e60048036038101906106599190613aad565b61194f565b005b34801561066c57600080fd5b5061068760048036038101906106829190613c60565b6119cb565b6040516106949190614363565b60405180910390f35b6106b760048036038101906106b29190613c89565b611a6a565b005b3480156106c557600080fd5b506106ce611d3f565b6040516106db91906145c5565b60405180910390f35b3480156106f057600080fd5b5061070b600480360381019061070691906139f9565b611d45565b60405161071891906145c5565b60405180910390f35b34801561072d57600080fd5b5061074860048036038101906107439190613a22565b611d57565b60405161075591906142c4565b60405180910390f35b34801561076a57600080fd5b50610773611deb565b60405161078091906145c5565b60405180910390f35b34801561079557600080fd5b506107b060048036038101906107ab91906139f9565b611df0565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061087d57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061088d575061088c82611ee8565b5b9050919050565b6060600280546108a39061488b565b80601f01602080910402602001604051908101604052809291908181526020018280546108cf9061488b565b801561091c5780601f106108f15761010080835404028352916020019161091c565b820191906000526020600020905b8154815290600101906020018083116108ff57829003601f168201915b5050505050905090565b600061093182611f52565b610967576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109ad82610e7f565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a15576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a34611fa0565b73ffffffffffffffffffffffffffffffffffffffff1614158015610a665750610a6481610a5f611fa0565b611d57565b155b15610a9d576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610aa8838383611fa8565b505050565b600e6020528060005260406000206000915054906101000a900460ff1681565b6000610ad761205a565b6001546000540303905090565b600860149054906101000a900460ff1681565b610b0283838361205f565b505050565b610b0f611fa0565b73ffffffffffffffffffffffffffffffffffffffff16610b2d611208565b73ffffffffffffffffffffffffffffffffffffffff1614610b83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7a906144a5565b60405180910390fd5b80600860146101000a81548160ff02191690836003811115610bce577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b02179055507fafa725e7f44cadb687a7043853fa1a7e7b8f0da74ce87ec546e9420f04da8c1e81604051610c029190614324565b60405180910390a150565b610c15611fa0565b73ffffffffffffffffffffffffffffffffffffffff16610c33611208565b73ffffffffffffffffffffffffffffffffffffffff1614610c89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c80906144a5565b60405180910390fd5b600047905060008111610cd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc890614505565b60405180910390fd5b6000610cdb611208565b73ffffffffffffffffffffffffffffffffffffffff1682604051610cfe9061421f565b60006040518083038185875af1925050503d8060008114610d3b576040519150601f19603f3d011682016040523d82523d6000602084013e610d40565b606091505b5050905080610d84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7b90614545565b60405180910390fd5b5050565b610da38383836040518060200160405280600081525061194f565b505050565b600b5481565b610db6611fa0565b73ffffffffffffffffffffffffffffffffffffffff16610dd4611208565b73ffffffffffffffffffffffffffffffffffffffff1614610e2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e21906144a5565b60405180910390fd5b818160099190610e3b929190613799565b507f5411e8ebf1636d9e83d5fc4900bf80cbac82e8790da2a4c94db4895e889eedf68282604051610e6d92919061433f565b60405180910390a15050565b600d5481565b6000610e8a82612515565b600001519050919050565b610e9d611fa0565b73ffffffffffffffffffffffffffffffffffffffff16610ebb611208565b73ffffffffffffffffffffffffffffffffffffffff1614610f11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f08906144a5565b60405180910390fd5b82600c8190555081600d8190555080600b81905550505050565b60098054610f389061488b565b80601f0160208091040260200160405190810160405280929190818152602001828054610f649061488b565b8015610fb15780601f10610f8657610100808354040283529160200191610fb1565b820191906000526020600020905b815481529060010190602001808311610f9457829003601f168201915b505050505081565b610fc1611fa0565b73ffffffffffffffffffffffffffffffffffffffff16610fdf611208565b73ffffffffffffffffffffffffffffffffffffffff1614611035576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102c906144a5565b60405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f5719a5656c5cfdaafa148ecf366fd3b0a7fae06449ce2a46225977fb7417e29d816040516110a59190614234565b60405180910390a150565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611118576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b611188611fa0565b73ffffffffffffffffffffffffffffffffffffffff166111a6611208565b73ffffffffffffffffffffffffffffffffffffffff16146111fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f3906144a5565b60405180910390fd5b61120660006127a4565b565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600380546112419061488b565b80601f016020809104026020016040519081016040528092919081815260200182805461126d9061488b565b80156112ba5780601f1061128f576101008083540402835291602001916112ba565b820191906000526020600020905b81548152906001019060200180831161129d57829003601f168201915b5050505050905090565b600260038111156112fe577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600860149054906101000a900460ff166003811115611346577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b14611386576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137d906144c5565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146113f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113eb906144e5565b60405180910390fd5b600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611481576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611478906143e5565b60405180910390fd5b60058161148d33611d45565b6114979190614684565b11156114d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114cf90614445565b60405180910390fd5b600b54816114e4610acd565b6114ee9190614684565b111561152f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152690614525565b60405180910390fd5b611539338261286a565b6001600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506115a781600d546115a2919061470b565b612888565b7f30385c845b448a36257a6a1716e6ad2e1bc2cbe333cde1e69fe849ad6511adfe33826040516115d892919061429b565b60405180910390a150565b6115eb611fa0565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611650576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806007600061165d611fa0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661170a611fa0565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161174f91906142c4565b60405180910390a35050565b611763611fa0565b73ffffffffffffffffffffffffffffffffffffffff16611781611208565b73ffffffffffffffffffffffffffffffffffffffff16146117d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ce906144a5565b60405180910390fd5b600380811115611810577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600860149054906101000a900460ff166003811115611858577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b14611898576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188f906145a5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611908576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ff90614405565b60405180910390fd5b611912828261286a565b7faf4148db7531eef9a0f61c22117ea94eaa5d2e1b76674e5ee2d4ce71fe19c2c9828260405161194392919061429b565b60405180910390a15050565b61195a84848461205f565b6119798373ffffffffffffffffffffffffffffffffffffffff16612929565b801561198e575061198c8484848461294c565b155b156119c5576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b60606119d682611f52565b611a0c576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611a16612aac565b9050600081511415611a375760405180602001604052806000815250611a62565b80611a4184612b3e565b604051602001611a529291906141d5565b6040516020818303038152906040525b915050919050565b60016003811115611aa4577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600860149054906101000a900460ff166003811115611aec577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b14611b2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2390614465565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611b9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b91906144e5565b60405180910390fd5b611bf2611ba8858533612ceb565b83838080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050612d23565b611c31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2890614585565b60405180910390fd5b600585611c3d33611d45565b611c479190614684565b1115611c88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7f90614445565b60405180910390fd5b600b5485611c94610acd565b611c9e9190614684565b1115611cdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd690614525565b60405180910390fd5b611ce9338661286a565b611cff85600c54611cfa919061470b565b612888565b7f30385c845b448a36257a6a1716e6ad2e1bc2cbe333cde1e69fe849ad6511adfe3386604051611d3092919061429b565b60405180910390a15050505050565b600c5481565b6000611d5082612d87565b9050919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600581565b611df8611fa0565b73ffffffffffffffffffffffffffffffffffffffff16611e16611208565b73ffffffffffffffffffffffffffffffffffffffff1614611e6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e63906144a5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611edc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed3906143c5565b60405180910390fd5b611ee5816127a4565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600081611f5d61205a565b11158015611f6c575060005482105b8015611f99575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600090565b600061206a82612515565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146120d5576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff166120f6611fa0565b73ffffffffffffffffffffffffffffffffffffffff16148061212557506121248561211f611fa0565b611d57565b5b8061216a5750612133611fa0565b73ffffffffffffffffffffffffffffffffffffffff1661215284610926565b73ffffffffffffffffffffffffffffffffffffffff16145b9050806121a3576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561220a576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6122178585856001612df1565b61222360008487611fa8565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156124a35760005482146124a257878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461250e8585856001612df7565b5050505050565b61251d61381f565b60008290508061252b61205a565b1115801561253a575060005481105b1561276d576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050806040015161276b57600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461264f57809250505061279f565b5b60011561276a57818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461276557809250505061279f565b612650565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612884828260405180602001604052806000815250612dfd565b5050565b803410156128cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c290614565565b60405180910390fd5b80341115612926573373ffffffffffffffffffffffffffffffffffffffff166108fc82346128f99190614765565b9081150290604051600060405180830381858888f19350505050158015612924573d6000803e3d6000fd5b505b50565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612972611fa0565b8786866040518563ffffffff1660e01b8152600401612994949392919061424f565b602060405180830381600087803b1580156129ae57600080fd5b505af19250505080156129df57506040513d601f19601f820116820180604052508101906129dc9190613bc9565b60015b612a59573d8060008114612a0f576040519150601f19603f3d011682016040523d82523d6000602084013e612a14565b606091505b50600081511415612a51576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b606060098054612abb9061488b565b80601f0160208091040260200160405190810160405280929190818152602001828054612ae79061488b565b8015612b345780601f10612b0957610100808354040283529160200191612b34565b820191906000526020600020905b815481529060010190602001808311612b1757829003601f168201915b5050505050905090565b60606000821415612b86576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612ce6565b600082905060005b60008214612bb8578080612ba1906148ee565b915050600a82612bb191906146da565b9150612b8e565b60008167ffffffffffffffff811115612bfa577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612c2c5781602001600182028036833780820191505090505b5090505b60008514612cdf57600182612c459190614765565b9150600a85612c549190614965565b6030612c609190614684565b60f81b818381518110612c9c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612cd891906146da565b9450612c30565b8093505050505b919050565b600083833084604051602001612d04949392919061419a565b6040516020818303038152906040528051906020012090509392505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612d688484612e0f565b73ffffffffffffffffffffffffffffffffffffffff1614905092915050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160089054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b50505050565b50505050565b612e0a8383836001612e34565b505050565b6000612e2c82612e1e85613202565b61323290919063ffffffff16565b905092915050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415612ea1576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000841415612edc576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612ee96000868387612df1565b83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000819050600085820190508380156130b357506130b28773ffffffffffffffffffffffffffffffffffffffff16612929565b5b15613179575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4613128600088848060010195508861294c565b61315e576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b808214156130b957826000541461317457600080fd5b6131e5565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48082141561317a575b8160008190555050506131fb6000868387612df7565b5050505050565b60008160405160200161321591906141f9565b604051602081830303815290604052805190602001209050919050565b60008060006132418585613259565b9150915061324e816132dc565b819250505092915050565b60008060418351141561329b5760008060006020860151925060408601519150606086015160001a905061328f8782858561362d565b945094505050506132d5565b6040835114156132cc5760008060208501519150604085015190506132c186838361373a565b9350935050506132d5565b60006002915091505b9250929050565b60006004811115613316577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b81600481111561334f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b141561335a5761362a565b60016004811115613394577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8160048111156133cd577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b141561340e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161340590614385565b60405180910390fd5b60026004811115613448577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b816004811115613481577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b14156134c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134b9906143a5565b60405180910390fd5b600360048111156134fc577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b816004811115613535577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1415613576576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161356d90614425565b60405180910390fd5b6004808111156135af577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8160048111156135e8577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1415613629576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161362090614485565b60405180910390fd5b5b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c1115613668576000600391509150613731565b601b8560ff16141580156136805750601c8560ff1614155b15613692576000600491509150613731565b6000600187878787604051600081526020016040526040516136b794939291906142df565b6020604051602081039080840390855afa1580156136d9573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561372857600060019250925050613731565b80600092509250505b94509492505050565b60008060007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60001b841690506000601b60ff8660001c901c61377d9190614684565b905061378b8782888561362d565b935093505050935093915050565b8280546137a59061488b565b90600052602060002090601f0160209004810192826137c7576000855561380e565b82601f106137e057803560ff191683800117855561380e565b8280016001018555821561380e579182015b8281111561380d5782358255916020019190600101906137f2565b5b50905061381b9190613862565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b8082111561387b576000816000905550600101613863565b5090565b600061389261388d84614605565b6145e0565b9050828152602081018484840111156138aa57600080fd5b6138b5848285614849565b509392505050565b6000813590506138cc81614ea5565b92915050565b6000813590506138e181614ebc565b92915050565b6000813590506138f681614ed3565b92915050565b60008151905061390b81614ed3565b92915050565b60008083601f84011261392357600080fd5b8235905067ffffffffffffffff81111561393c57600080fd5b60208301915083600182028301111561395457600080fd5b9250929050565b600082601f83011261396c57600080fd5b813561397c84826020860161387f565b91505092915050565b60008135905061399481614eea565b92915050565b60008083601f8401126139ac57600080fd5b8235905067ffffffffffffffff8111156139c557600080fd5b6020830191508360018202830111156139dd57600080fd5b9250929050565b6000813590506139f381614efa565b92915050565b600060208284031215613a0b57600080fd5b6000613a19848285016138bd565b91505092915050565b60008060408385031215613a3557600080fd5b6000613a43858286016138bd565b9250506020613a54858286016138bd565b9150509250929050565b600080600060608486031215613a7357600080fd5b6000613a81868287016138bd565b9350506020613a92868287016138bd565b9250506040613aa3868287016139e4565b9150509250925092565b60008060008060808587031215613ac357600080fd5b6000613ad1878288016138bd565b9450506020613ae2878288016138bd565b9350506040613af3878288016139e4565b925050606085013567ffffffffffffffff811115613b1057600080fd5b613b1c8782880161395b565b91505092959194509250565b60008060408385031215613b3b57600080fd5b6000613b49858286016138bd565b9250506020613b5a858286016138d2565b9150509250929050565b60008060408385031215613b7757600080fd5b6000613b85858286016138bd565b9250506020613b96858286016139e4565b9150509250929050565b600060208284031215613bb257600080fd5b6000613bc0848285016138e7565b91505092915050565b600060208284031215613bdb57600080fd5b6000613be9848285016138fc565b91505092915050565b600060208284031215613c0457600080fd5b6000613c1284828501613985565b91505092915050565b60008060208385031215613c2e57600080fd5b600083013567ffffffffffffffff811115613c4857600080fd5b613c548582860161399a565b92509250509250929050565b600060208284031215613c7257600080fd5b6000613c80848285016139e4565b91505092915050565b600080600080600060608688031215613ca157600080fd5b6000613caf888289016139e4565b955050602086013567ffffffffffffffff811115613ccc57600080fd5b613cd88882890161399a565b9450945050604086013567ffffffffffffffff811115613cf757600080fd5b613d0388828901613911565b92509250509295509295909350565b600080600060608486031215613d2757600080fd5b6000613d35868287016139e4565b9350506020613d46868287016139e4565b9250506040613d57868287016139e4565b9150509250925092565b613d6a81614799565b82525050565b613d81613d7c82614799565b614937565b82525050565b613d90816147ab565b82525050565b613d9f816147b7565b82525050565b613db6613db1826147b7565b614949565b82525050565b6000613dc782614636565b613dd1818561464c565b9350613de1818560208601614858565b613dea81614a81565b840191505092915050565b613dfe81614837565b82525050565b6000613e108385614668565b9350613e1d838584614849565b613e2683614a81565b840190509392505050565b6000613e3d8385614679565b9350613e4a838584614849565b82840190509392505050565b6000613e6182614641565b613e6b8185614668565b9350613e7b818560208601614858565b613e8481614a81565b840191505092915050565b6000613e9a82614641565b613ea48185614679565b9350613eb4818560208601614858565b80840191505092915050565b6000613ecd601883614668565b9150613ed882614a9f565b602082019050919050565b6000613ef0601f83614668565b9150613efb82614ac8565b602082019050919050565b6000613f13601c83614679565b9150613f1e82614af1565b601c82019050919050565b6000613f36602683614668565b9150613f4182614b1a565b604082019050919050565b6000613f59603683614668565b9150613f6482614b69565b604082019050919050565b6000613f7c601283614668565b9150613f8782614bb8565b602082019050919050565b6000613f9f602283614668565b9150613faa82614be1565b604082019050919050565b6000613fc2602983614668565b9150613fcd82614c30565b604082019050919050565b6000613fe5601b83614668565b9150613ff082614c7f565b602082019050919050565b6000614008602283614668565b915061401382614ca8565b604082019050919050565b600061402b602083614668565b915061403682614cf7565b602082019050919050565b600061404e601f83614668565b915061405982614d20565b602082019050919050565b6000614071602583614668565b915061407c82614d49565b604082019050919050565b6000614094601c83614668565b915061409f82614d98565b602082019050919050565b60006140b7601983614668565b91506140c282614dc1565b602082019050919050565b60006140da60008361465d565b91506140e582614dea565b600082019050919050565b60006140fd601083614668565b915061410882614ded565b602082019050919050565b6000614120601b83614668565b915061412b82614e16565b602082019050919050565b6000614143601183614668565b915061414e82614e3f565b602082019050919050565b6000614166601783614668565b915061417182614e68565b602082019050919050565b61418581614820565b82525050565b6141948161482a565b82525050565b60006141a7828688613e31565b91506141b38285613d70565b6014820191506141c38284613d70565b60148201915081905095945050505050565b60006141e18285613e8f565b91506141ed8284613e8f565b91508190509392505050565b600061420482613f06565b91506142108284613da5565b60208201915081905092915050565b600061422a826140cd565b9150819050919050565b60006020820190506142496000830184613d61565b92915050565b60006080820190506142646000830187613d61565b6142716020830186613d61565b61427e604083018561417c565b81810360608301526142908184613dbc565b905095945050505050565b60006040820190506142b06000830185613d61565b6142bd602083018461417c565b9392505050565b60006020820190506142d96000830184613d87565b92915050565b60006080820190506142f46000830187613d96565b614301602083018661418b565b61430e6040830185613d96565b61431b6060830184613d96565b95945050505050565b60006020820190506143396000830184613df5565b92915050565b6000602082019050818103600083015261435a818486613e04565b90509392505050565b6000602082019050818103600083015261437d8184613e56565b905092915050565b6000602082019050818103600083015261439e81613ec0565b9050919050565b600060208201905081810360008301526143be81613ee3565b9050919050565b600060208201905081810360008301526143de81613f29565b9050919050565b600060208201905081810360008301526143fe81613f4c565b9050919050565b6000602082019050818103600083015261441e81613f6f565b9050919050565b6000602082019050818103600083015261443e81613f92565b9050919050565b6000602082019050818103600083015261445e81613fb5565b9050919050565b6000602082019050818103600083015261447e81613fd8565b9050919050565b6000602082019050818103600083015261449e81613ffb565b9050919050565b600060208201905081810360008301526144be8161401e565b9050919050565b600060208201905081810360008301526144de81614041565b9050919050565b600060208201905081810360008301526144fe81614064565b9050919050565b6000602082019050818103600083015261451e81614087565b9050919050565b6000602082019050818103600083015261453e816140aa565b9050919050565b6000602082019050818103600083015261455e816140f0565b9050919050565b6000602082019050818103600083015261457e81614113565b9050919050565b6000602082019050818103600083015261459e81614136565b9050919050565b600060208201905081810360008301526145be81614159565b9050919050565b60006020820190506145da600083018461417c565b92915050565b60006145ea6145fb565b90506145f682826148bd565b919050565b6000604051905090565b600067ffffffffffffffff8211156146205761461f614a52565b5b61462982614a81565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061468f82614820565b915061469a83614820565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156146cf576146ce614996565b5b828201905092915050565b60006146e582614820565b91506146f083614820565b925082614700576146ff6149c5565b5b828204905092915050565b600061471682614820565b915061472183614820565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561475a57614759614996565b5b828202905092915050565b600061477082614820565b915061477b83614820565b92508282101561478e5761478d614996565b5b828203905092915050565b60006147a482614800565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60008190506147fb82614e91565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000614842826147ed565b9050919050565b82818337600083830152505050565b60005b8381101561487657808201518184015260208101905061485b565b83811115614885576000848401525b50505050565b600060028204905060018216806148a357607f821691505b602082108114156148b7576148b6614a23565b5b50919050565b6148c682614a81565b810181811067ffffffffffffffff821117156148e5576148e4614a52565b5b80604052505050565b60006148f982614820565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561492c5761492b614996565b5b600182019050919050565b600061494282614953565b9050919050565b6000819050919050565b600061495e82614a92565b9050919050565b600061497082614820565b915061497b83614820565b92508261498b5761498a6149c5565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f354b4d3a205468652077616c6c65742068617320616c7265616479206d696e7460008201527f656420647572696e67207075626c69632073616c652e00000000000000000000602082015250565b7f354b4d3a207a65726f20616464726573732e0000000000000000000000000000600082015250565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b7f354b4d3a206d6178206d696e7420616d6f756e74207065722077616c6c65742060008201527f65786365656465642e0000000000000000000000000000000000000000000000602082015250565b7f354b4d3a2050726573616c65206973206e6f74206163746976652e0000000000600082015250565b7f45434453413a20696e76616c6964207369676e6174757265202776272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f354b4d3a205075626c69632073616c65206973206e6f74206163746976652e00600082015250565b7f354b4d3a20636f6e7472616374206973206e6f7420616c6c6f77656420746f2060008201527f6d696e742e000000000000000000000000000000000000000000000000000000602082015250565b7f354b4d3a206e6f2062616c616e636520746f2077697468647261772e00000000600082015250565b7f354b4d3a206d617820737570706c792065786365656465642e00000000000000600082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f354b4d3a206e65656420746f2073656e64206d6f7265204554482e0000000000600082015250565b7f354b4d3a20696e76616c6964207369672e000000000000000000000000000000600082015250565b7f354b4d3a2073616c65206e6f742066696e69736865642e000000000000000000600082015250565b60048110614ea257614ea16149f4565b5b50565b614eae81614799565b8114614eb957600080fd5b50565b614ec5816147ab565b8114614ed057600080fd5b50565b614edc816147c1565b8114614ee757600080fd5b50565b60048110614ef757600080fd5b50565b614f0381614820565b8114614f0e57600080fd5b5056fea26469706673582212203e05fe2ba433ca8d3d85b95d51475742efed1f42d336a70f33f0bd93e7c6b3a064736f6c634300080400330000000000000000000000000000000000000000000000000000000000000080000000000000000000000000f6d7c1f002f7f1a15df08180c3490a61f59aa73c00000000000000000000000000000000000000000000000000f8b0a10e4700000000000000000000000000000000000000000000000000000186cc6acd4b00000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d59566a7a4e32376e4153653764536d31664c39334d6a46324547544c3251695438504b465a3351584d4d62332f00000000000000000000