60806040523480156200001157600080fd5b5060405162004d1a38038062004d1a83398181016040528101906200003791906200049e565b818181600290805190602001906200005192919062000370565b5080600390805190602001906200006a92919062000370565b505050620000916000801b62000085620000da60201b60201c565b620000e260201b60201c565b620000d27f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6620000c6620000da60201b60201c565b620000e260201b60201c565b5050620006a7565b600033905090565b620000f48282620000f860201b60201c565b5050565b6200010f82826200014060201b62000f391760201c565b6200013b81600160008581526020019081526020016000206200023160201b620010191790919060201c565b505050565b6200015282826200026960201b60201c565b6200022d57600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620001d2620000da60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b600062000261836000018373ffffffffffffffffffffffffffffffffffffffff1660001b620002d360201b60201c565b905092915050565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000620002e783836200034d60201b60201c565b6200034257826000018290806001815401808255809150506001900390600052602060002001600090919091909150558260000180549050836001016000848152602001908152602001600020819055506001905062000347565b600090505b92915050565b600080836001016000848152602001908152602001600020541415905092915050565b8280546200037e90620005b8565b90600052602060002090601f016020900481019282620003a25760008555620003ee565b82601f10620003bd57805160ff1916838001178555620003ee565b82800160010185558215620003ee579182015b82811115620003ed578251825591602001919060010190620003d0565b5b509050620003fd919062000401565b5090565b5b808211156200041c57600081600090555060010162000402565b5090565b60006200043762000431846200054c565b62000523565b90508281526020810184848401111562000456576200045562000687565b5b6200046384828562000582565b509392505050565b600082601f83011262000483576200048262000682565b5b81516200049584826020860162000420565b91505092915050565b60008060408385031215620004b857620004b762000691565b5b600083015167ffffffffffffffff811115620004d957620004d86200068c565b5b620004e7858286016200046b565b925050602083015167ffffffffffffffff8111156200050b576200050a6200068c565b5b62000519858286016200046b565b9150509250929050565b60006200052f62000542565b90506200053d8282620005ee565b919050565b6000604051905090565b600067ffffffffffffffff8211156200056a576200056962000653565b5b620005758262000696565b9050602081019050919050565b60005b83811015620005a257808201518184015260208101905062000585565b83811115620005b2576000848401525b50505050565b60006002820490506001821680620005d157607f821691505b60208210811415620005e857620005e762000624565b5b50919050565b620005f98262000696565b810181811067ffffffffffffffff821117156200061b576200061a62000653565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b61466380620006b76000396000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c80636352211e116100f9578063b88d4fde11610097578063d0def52111610071578063d0def52114610516578063d539139314610532578063d547741f14610550578063e985e9c51461056c576101a9565b8063b88d4fde1461049a578063c87b56dd146104b6578063ca15c873146104e6576101a9565b806391d14854116100d357806391d148541461041257806395d89b4114610442578063a217fddf14610460578063a22cb4651461047e576101a9565b80636352211e1461038257806370a08231146103b25780639010d07c146103e2576101a9565b8063248a9ca31161016657806336568abe1161014057806336568abe146102fe57806342842e0e1461031a57806342966c68146103365780634f6ccce714610352576101a9565b8063248a9ca3146102825780632f2ff15d146102b25780632f745c59146102ce576101a9565b806301ffc9a7146101ae57806306fdde03146101de578063081812fc146101fc578063095ea7b31461022c57806318160ddd1461024857806323b872dd14610266575b600080fd5b6101c860048036038101906101c3919061323d565b61059c565b6040516101d5919061378d565b60405180910390f35b6101e66105ae565b6040516101f391906137c3565b60405180910390f35b61021660048036038101906102119190613297565b610640565b6040516102239190613726565b60405180910390f35b61024660048036038101906102419190613150565b6106c5565b005b6102506107dd565b60405161025d9190613a85565b60405180910390f35b610280600480360381019061027b9190612fde565b6107ea565b005b61029c60048036038101906102979190613190565b61084a565b6040516102a991906137a8565b60405180910390f35b6102cc60048036038101906102c791906131bd565b610869565b005b6102e860048036038101906102e39190613150565b610892565b6040516102f59190613a85565b60405180910390f35b610318600480360381019061031391906131bd565b610937565b005b610334600480360381019061032f9190612fde565b6109ba565b005b610350600480360381019061034b9190613297565b6109da565b005b61036c60048036038101906103679190613297565b610a36565b6040516103799190613a85565b60405180910390f35b61039c60048036038101906103979190613297565b610aa7565b6040516103a99190613726565b60405180910390f35b6103cc60048036038101906103c79190612f71565b610b59565b6040516103d99190613a85565b60405180910390f35b6103fc60048036038101906103f791906131fd565b610c11565b6040516104099190613726565b60405180910390f35b61042c600480360381019061042791906131bd565b610c40565b604051610439919061378d565b60405180910390f35b61044a610caa565b60405161045791906137c3565b60405180910390f35b610468610d3c565b60405161047591906137a8565b60405180910390f35b610498600480360381019061049391906130b4565b610d43565b005b6104b460048036038101906104af9190613031565b610d59565b005b6104d060048036038101906104cb9190613297565b610dbb565b6040516104dd91906137c3565b60405180910390f35b61050060048036038101906104fb9190613190565b610dcd565b60405161050d9190613a85565b60405180910390f35b610530600480360381019061052b91906130f4565b610df1565b005b61053a610e58565b60405161054791906137a8565b60405180910390f35b61056a600480360381019061056591906131bd565b610e7c565b005b61058660048036038101906105819190612f9e565b610ea5565b604051610593919061378d565b60405180910390f35b60006105a782611049565b9050919050565b6060600280546105bd90613d69565b80601f01602080910402602001604051908101604052809291908181526020018280546105e990613d69565b80156106365780601f1061060b57610100808354040283529160200191610636565b820191906000526020600020905b81548152906001019060200180831161061957829003601f168201915b5050505050905090565b600061064b826110c3565b61068a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161068190613985565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006106d082610aa7565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610741576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610738906139e5565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661076061112f565b73ffffffffffffffffffffffffffffffffffffffff16148061078f575061078e8161078961112f565b610ea5565b5b6107ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107c5906138c5565b60405180910390fd5b6107d88383611137565b505050565b6000600a80549050905090565b6107fb6107f561112f565b826111f0565b61083a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083190613a05565b60405180910390fd5b6108458383836112ce565b505050565b6000806000838152602001908152602001600020600101549050919050565b6108728261084a565b6108838161087e61112f565b61152a565b61088d83836115c7565b505050565b600061089d83610b59565b82106108de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d590613805565b60405180910390fd5b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b61093f61112f565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146109ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a390613a65565b60405180910390fd5b6109b682826115fb565b5050565b6109d583838360405180602001604052806000815250610d59565b505050565b6109eb6109e561112f565b826111f0565b610a2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2190613a45565b60405180910390fd5b610a338161162f565b50565b6000610a406107dd565b8210610a81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7890613a25565b60405180910390fd5b600a8281548110610a9557610a94613f02565b5b90600052602060002001549050919050565b6000806004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610b50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4790613905565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610bca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc1906138e5565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000610c38826001600086815260200190815260200160002061163b90919063ffffffff16565b905092915050565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b606060038054610cb990613d69565b80601f0160208091040260200160405190810160405280929190818152602001828054610ce590613d69565b8015610d325780601f10610d0757610100808354040283529160200191610d32565b820191906000526020600020905b815481529060010190602001808311610d1557829003601f168201915b5050505050905090565b6000801b81565b610d55610d4e61112f565b8383611655565b5050565b610d6a610d6461112f565b836111f0565b610da9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da090613a05565b60405180910390fd5b610db5848484846117c2565b50505050565b6060610dc68261181e565b9050919050565b6000610dea60016000848152602001908152602001600020611970565b9050919050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6610e2381610e1e61112f565b61152a565b610e3683610e31600d611985565b611993565b610e49610e43600d611985565b836119b1565b610e53600d611a25565b505050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b610e858261084a565b610e9681610e9161112f565b61152a565b610ea083836115fb565b505050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610f438282610c40565b61101557600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550610fba61112f565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6000611041836000018373ffffffffffffffffffffffffffffffffffffffff1660001b611a3b565b905092915050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806110bc57506110bb82611aab565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816006600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166111aa83610aa7565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006111fb826110c3565b61123a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611231906138a5565b60405180910390fd5b600061124583610aa7565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806112b457508373ffffffffffffffffffffffffffffffffffffffff1661129c84610640565b73ffffffffffffffffffffffffffffffffffffffff16145b806112c557506112c48185610ea5565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166112ee82610aa7565b73ffffffffffffffffffffffffffffffffffffffff1614611344576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133b906139a5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ab90613865565b60405180910390fd5b6113bf838383611b8d565b6113ca600082611137565b6001600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461141a9190613c4b565b925050819055506001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114719190613b6a565b92505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6115348282610c40565b6115c3576115598173ffffffffffffffffffffffffffffffffffffffff166014611b9d565b6115678360001c6020611b9d565b6040516020016115789291906136ec565b6040516020818303038152906040526040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ba91906137c3565b60405180910390fd5b5050565b6115d18282610f39565b6115f6816001600085815260200190815260200160002061101990919063ffffffff16565b505050565b6116058282611dd9565b61162a8160016000858152602001908152602001600020611eba90919063ffffffff16565b505050565b61163881611eea565b50565b600061164a8360000183611f3d565b60001c905092915050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156116c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116bb90613885565b60405180910390fd5b80600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516117b5919061378d565b60405180910390a3505050565b6117cd8484846112ce565b6117d984848484611f68565b611818576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180f90613825565b60405180910390fd5b50505050565b6060611829826110c3565b611868576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185f90613965565b60405180910390fd5b6000600c6000848152602001908152602001600020805461188890613d69565b80601f01602080910402602001604051908101604052809291908181526020018280546118b490613d69565b80156119015780601f106118d657610100808354040283529160200191611901565b820191906000526020600020905b8154815290600101906020018083116118e457829003601f168201915b5050505050905060006119126120ff565b905060008151141561192857819250505061196b565b60008251111561195d5780826040516020016119459291906136c8565b6040516020818303038152906040529250505061196b565b61196684612116565b925050505b919050565b600061197e826000016121bd565b9050919050565b600081600001549050919050565b6119ad8282604051806020016040528060008152506121ce565b5050565b6119ba826110c3565b6119f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f090613925565b60405180910390fd5b80600c60008481526020019081526020016000209080519060200190611a20929190612d30565b505050565b6001816000016000828254019250508190555050565b6000611a478383612229565b611aa0578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050611aa5565b600090505b92915050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611b7657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611b865750611b858261224c565b5b9050919050565b611b988383836122c6565b505050565b606060006002836002611bb09190613bf1565b611bba9190613b6a565b67ffffffffffffffff811115611bd357611bd2613f31565b5b6040519080825280601f01601f191660200182016040528015611c055781602001600182028036833780820191505090505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110611c3d57611c3c613f02565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110611ca157611ca0613f02565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060006001846002611ce19190613bf1565b611ceb9190613b6a565b90505b6001811115611d8b577f3031323334353637383961626364656600000000000000000000000000000000600f861660108110611d2d57611d2c613f02565b5b1a60f81b828281518110611d4457611d43613f02565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c945080611d8490613d3f565b9050611cee565b5060008414611dcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc6906137e5565b60405180910390fd5b8091505092915050565b611de38282610c40565b15611eb657600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611e5b61112f565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b6000611ee2836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6123da565b905092915050565b611ef3816124ee565b6000600c60008381526020019081526020016000208054611f1390613d69565b905014611f3a57600c60008281526020019081526020016000206000611f399190612db6565b5b50565b6000826000018281548110611f5557611f54613f02565b5b9060005260206000200154905092915050565b6000611f898473ffffffffffffffffffffffffffffffffffffffff166125ff565b156120f2578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611fb261112f565b8786866040518563ffffffff1660e01b8152600401611fd49493929190613741565b602060405180830381600087803b158015611fee57600080fd5b505af192505050801561201f57506040513d601f19601f8201168201806040525081019061201c919061326a565b60015b6120a2573d806000811461204f576040519150601f19603f3d011682016040523d82523d6000602084013e612054565b606091505b5060008151141561209a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209190613825565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506120f7565b600190505b949350505050565b606060405180602001604052806000815250905090565b6060612121826110c3565b612160576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612157906139c5565b60405180910390fd5b600061216a6120ff565b9050600081511161218a57604051806020016040528060008152506121b5565b8061219484612612565b6040516020016121a59291906136c8565b6040516020818303038152906040525b915050919050565b600081600001805490509050919050565b6121d88383612773565b6121e56000848484611f68565b612224576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221b90613825565b60405180910390fd5b505050565b600080836001016000848152602001908152602001600020541415905092915050565b60007f5a05180f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806122bf57506122be82612941565b5b9050919050565b6122d18383836129bb565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156123145761230f816129c0565b612353565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612352576123518382612a09565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123965761239181612b76565b6123d5565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146123d4576123d38282612c47565b5b5b505050565b600080836001016000848152602001908152602001600020549050600081146124e257600060018261240c9190613c4b565b90506000600186600001805490506124249190613c4b565b905081811461249357600086600001828154811061244557612444613f02565b5b906000526020600020015490508087600001848154811061246957612468613f02565b5b90600052602060002001819055508387600101600083815260200190815260200160002081905550505b856000018054806124a7576124a6613ed3565b5b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506124e8565b60009150505b92915050565b60006124f982610aa7565b905061250781600084611b8d565b612512600083611137565b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125629190613c4b565b925050819055506004600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b6060600082141561265a576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061276e565b600082905060005b6000821461268c57808061267590613dcc565b915050600a826126859190613bc0565b9150612662565b60008167ffffffffffffffff8111156126a8576126a7613f31565b5b6040519080825280601f01601f1916602001820160405280156126da5781602001600182028036833780820191505090505b5090505b60008514612767576001826126f39190613c4b565b9150600a856127029190613e15565b603061270e9190613b6a565b60f81b81838151811061272457612723613f02565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856127609190613bc0565b94506126de565b8093505050505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127da90613945565b60405180910390fd5b6127ec816110c3565b1561282c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282390613845565b60405180910390fd5b61283860008383611b8d565b6001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128889190613b6a565b92505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806129b457506129b382612cc6565b5b9050919050565b505050565b600a80549050600b600083815260200190815260200160002081905550600a81908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612a1684610b59565b612a209190613c4b565b9050600060096000848152602001908152602001600020549050818114612b05576000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816009600083815260200190815260200160002081905550505b6009600084815260200190815260200160002060009055600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600a80549050612b8a9190613c4b565b90506000600b60008481526020019081526020016000205490506000600a8381548110612bba57612bb9613f02565b5b9060005260206000200154905080600a8381548110612bdc57612bdb613f02565b5b906000526020600020018190555081600b600083815260200190815260200160002081905550600b600085815260200190815260200160002060009055600a805480612c2b57612c2a613ed3565b5b6001900381819060005260206000200160009055905550505050565b6000612c5283610b59565b905081600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806009600084815260200190815260200160002081905550505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b828054612d3c90613d69565b90600052602060002090601f016020900481019282612d5e5760008555612da5565b82601f10612d7757805160ff1916838001178555612da5565b82800160010185558215612da5579182015b82811115612da4578251825591602001919060010190612d89565b5b509050612db29190612df6565b5090565b508054612dc290613d69565b6000825580601f10612dd45750612df3565b601f016020900490600052602060002090810190612df29190612df6565b5b50565b5b80821115612e0f576000816000905550600101612df7565b5090565b6000612e26612e2184613ac5565b613aa0565b905082815260208101848484011115612e4257612e41613f65565b5b612e4d848285613cfd565b509392505050565b6000612e68612e6384613af6565b613aa0565b905082815260208101848484011115612e8457612e83613f65565b5b612e8f848285613cfd565b509392505050565b600081359050612ea6816145ba565b92915050565b600081359050612ebb816145d1565b92915050565b600081359050612ed0816145e8565b92915050565b600081359050612ee5816145ff565b92915050565b600081519050612efa816145ff565b92915050565b600082601f830112612f1557612f14613f60565b5b8135612f25848260208601612e13565b91505092915050565b600082601f830112612f4357612f42613f60565b5b8135612f53848260208601612e55565b91505092915050565b600081359050612f6b81614616565b92915050565b600060208284031215612f8757612f86613f6f565b5b6000612f9584828501612e97565b91505092915050565b60008060408385031215612fb557612fb4613f6f565b5b6000612fc385828601612e97565b9250506020612fd485828601612e97565b9150509250929050565b600080600060608486031215612ff757612ff6613f6f565b5b600061300586828701612e97565b935050602061301686828701612e97565b925050604061302786828701612f5c565b9150509250925092565b6000806000806080858703121561304b5761304a613f6f565b5b600061305987828801612e97565b945050602061306a87828801612e97565b935050604061307b87828801612f5c565b925050606085013567ffffffffffffffff81111561309c5761309b613f6a565b5b6130a887828801612f00565b91505092959194509250565b600080604083850312156130cb576130ca613f6f565b5b60006130d985828601612e97565b92505060206130ea85828601612eac565b9150509250929050565b6000806040838503121561310b5761310a613f6f565b5b600061311985828601612e97565b925050602083013567ffffffffffffffff81111561313a57613139613f6a565b5b61314685828601612f2e565b9150509250929050565b6000806040838503121561316757613166613f6f565b5b600061317585828601612e97565b925050602061318685828601612f5c565b9150509250929050565b6000602082840312156131a6576131a5613f6f565b5b60006131b484828501612ec1565b91505092915050565b600080604083850312156131d4576131d3613f6f565b5b60006131e285828601612ec1565b92505060206131f385828601612e97565b9150509250929050565b6000806040838503121561321457613213613f6f565b5b600061322285828601612ec1565b925050602061323385828601612f5c565b9150509250929050565b60006020828403121561325357613252613f6f565b5b600061326184828501612ed6565b91505092915050565b6000602082840312156132805761327f613f6f565b5b600061328e84828501612eeb565b91505092915050565b6000602082840312156132ad576132ac613f6f565b5b60006132bb84828501612f5c565b91505092915050565b6132cd81613c7f565b82525050565b6132dc81613c91565b82525050565b6132eb81613c9d565b82525050565b60006132fc82613b27565b6133068185613b3d565b9350613316818560208601613d0c565b61331f81613f74565b840191505092915050565b600061333582613b32565b61333f8185613b4e565b935061334f818560208601613d0c565b61335881613f74565b840191505092915050565b600061336e82613b32565b6133788185613b5f565b9350613388818560208601613d0c565b80840191505092915050565b60006133a1602083613b4e565b91506133ac82613f85565b602082019050919050565b60006133c4602b83613b4e565b91506133cf82613fae565b604082019050919050565b60006133e7603283613b4e565b91506133f282613ffd565b604082019050919050565b600061340a601c83613b4e565b91506134158261404c565b602082019050919050565b600061342d602483613b4e565b915061343882614075565b604082019050919050565b6000613450601983613b4e565b915061345b826140c4565b602082019050919050565b6000613473602c83613b4e565b915061347e826140ed565b604082019050919050565b6000613496603883613b4e565b91506134a18261413c565b604082019050919050565b60006134b9602a83613b4e565b91506134c48261418b565b604082019050919050565b60006134dc602983613b4e565b91506134e7826141da565b604082019050919050565b60006134ff602e83613b4e565b915061350a82614229565b604082019050919050565b6000613522602083613b4e565b915061352d82614278565b602082019050919050565b6000613545603183613b4e565b9150613550826142a1565b604082019050919050565b6000613568602c83613b4e565b9150613573826142f0565b604082019050919050565b600061358b602983613b4e565b91506135968261433f565b604082019050919050565b60006135ae602f83613b4e565b91506135b98261438e565b604082019050919050565b60006135d1602183613b4e565b91506135dc826143dd565b604082019050919050565b60006135f4603183613b4e565b91506135ff8261442c565b604082019050919050565b6000613617602c83613b4e565b91506136228261447b565b604082019050919050565b600061363a601783613b5f565b9150613645826144ca565b601782019050919050565b600061365d603083613b4e565b9150613668826144f3565b604082019050919050565b6000613680601183613b5f565b915061368b82614542565b601182019050919050565b60006136a3602f83613b4e565b91506136ae8261456b565b604082019050919050565b6136c281613cf3565b82525050565b60006136d48285613363565b91506136e08284613363565b91508190509392505050565b60006136f78261362d565b91506137038285613363565b915061370e82613673565b915061371a8284613363565b91508190509392505050565b600060208201905061373b60008301846132c4565b92915050565b600060808201905061375660008301876132c4565b61376360208301866132c4565b61377060408301856136b9565b818103606083015261378281846132f1565b905095945050505050565b60006020820190506137a260008301846132d3565b92915050565b60006020820190506137bd60008301846132e2565b92915050565b600060208201905081810360008301526137dd818461332a565b905092915050565b600060208201905081810360008301526137fe81613394565b9050919050565b6000602082019050818103600083015261381e816133b7565b9050919050565b6000602082019050818103600083015261383e816133da565b9050919050565b6000602082019050818103600083015261385e816133fd565b9050919050565b6000602082019050818103600083015261387e81613420565b9050919050565b6000602082019050818103600083015261389e81613443565b9050919050565b600060208201905081810360008301526138be81613466565b9050919050565b600060208201905081810360008301526138de81613489565b9050919050565b600060208201905081810360008301526138fe816134ac565b9050919050565b6000602082019050818103600083015261391e816134cf565b9050919050565b6000602082019050818103600083015261393e816134f2565b9050919050565b6000602082019050818103600083015261395e81613515565b9050919050565b6000602082019050818103600083015261397e81613538565b9050919050565b6000602082019050818103600083015261399e8161355b565b9050919050565b600060208201905081810360008301526139be8161357e565b9050919050565b600060208201905081810360008301526139de816135a1565b9050919050565b600060208201905081810360008301526139fe816135c4565b9050919050565b60006020820190508181036000830152613a1e816135e7565b9050919050565b60006020820190508181036000830152613a3e8161360a565b9050919050565b60006020820190508181036000830152613a5e81613650565b9050919050565b60006020820190508181036000830152613a7e81613696565b9050919050565b6000602082019050613a9a60008301846136b9565b92915050565b6000613aaa613abb565b9050613ab68282613d9b565b919050565b6000604051905090565b600067ffffffffffffffff821115613ae057613adf613f31565b5b613ae982613f74565b9050602081019050919050565b600067ffffffffffffffff821115613b1157613b10613f31565b5b613b1a82613f74565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613b7582613cf3565b9150613b8083613cf3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613bb557613bb4613e46565b5b828201905092915050565b6000613bcb82613cf3565b9150613bd683613cf3565b925082613be657613be5613e75565b5b828204905092915050565b6000613bfc82613cf3565b9150613c0783613cf3565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613c4057613c3f613e46565b5b828202905092915050565b6000613c5682613cf3565b9150613c6183613cf3565b925082821015613c7457613c73613e46565b5b828203905092915050565b6000613c8a82613cd3565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613d2a578082015181840152602081019050613d0f565b83811115613d39576000848401525b50505050565b6000613d4a82613cf3565b91506000821415613d5e57613d5d613e46565b5b600182039050919050565b60006002820490506001821680613d8157607f821691505b60208210811415613d9557613d94613ea4565b5b50919050565b613da482613f74565b810181811067ffffffffffffffff82111715613dc357613dc2613f31565b5b80604052505050565b6000613dd782613cf3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613e0a57613e09613e46565b5b600182019050919050565b6000613e2082613cf3565b9150613e2b83613cf3565b925082613e3b57613e3a613e75565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60008201527f6578697374656e7420746f6b656e000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b7f4552433732314275726e61626c653a2063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656400000000000000000000000000000000602082015250565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b6145c381613c7f565b81146145ce57600080fd5b50565b6145da81613c91565b81146145e557600080fd5b50565b6145f181613c9d565b81146145fc57600080fd5b50565b61460881613ca7565b811461461357600080fd5b50565b61461f81613cf3565b811461462a57600080fd5b5056fea264697066735822122096e71d169d02f1b3c2c3c9d138c38f8eebc0cebf2571a5628b2e13e8b9d61f4964736f6c634300080700330000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000134b696e6773204f6620546865204369746965730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044b4f544300000000000000000000000000000000000000000000000000000000