60806040523480156200001157600080fd5b506040518060400160405280600881526020017f4b696c6c4a6577730000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4454414a0000000000000000000000000000000000000000000000000000000081525081600090816200008f9190620003ba565b508060019081620000a19190620003ba565b50505033600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550736f14c02fc1f78322cfd7d707ab90f18bad3b54f5600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620004a1565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620001c257607f821691505b602082108103620001d857620001d76200017a565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620002427fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000203565b6200024e868362000203565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006200029b620002956200028f8462000266565b62000270565b62000266565b9050919050565b6000819050919050565b620002b7836200027a565b620002cf620002c682620002a2565b84845462000210565b825550505050565b600090565b620002e6620002d7565b620002f3818484620002ac565b505050565b5b818110156200031b576200030f600082620002dc565b600181019050620002f9565b5050565b601f8211156200036a576200033481620001de565b6200033f84620001f3565b810160208510156200034f578190505b620003676200035e85620001f3565b830182620002f8565b50505b505050565b600082821c905092915050565b60006200038f600019846008026200036f565b1980831691505092915050565b6000620003aa83836200037c565b9150826002028217905092915050565b620003c58262000140565b67ffffffffffffffff811115620003e157620003e06200014b565b5b620003ed8254620001a9565b620003fa8282856200031f565b600060209050601f8311600181146200043257600084156200041d578287015190505b6200042985826200039c565b86555062000499565b601f1984166200044286620001de565b60005b828110156200046c5784890151825560018201915060208501945060208101905062000445565b868310156200048c578489015162000488601f8916826200037c565b8355505b6001600288020188555050505b505050505050565b6124f280620004b16000396000f3fe6080604052600436106101095760003560e01c80636352211e11610095578063a9059cbb11610064578063a9059cbb1461036c578063b88d4fde14610388578063c87b56dd146103b1578063d505accf146103ee578063e985e9c51461041e57610109565b80636352211e1461029e57806370a08231146102db57806395d89b4114610318578063a22cb4651461034357610109565b806314b0fdd5116100dc57806314b0fdd5146101dc57806323b872dd146101f85780632ebd1e2814610221578063313ce5671461024a57806342842e0e1461027557610109565b806301ffc9a71461010e57806306fdde031461014b578063081812fc14610176578063095ea7b3146101b3575b600080fd5b34801561011a57600080fd5b5061013560048036038101906101309190611738565b61045b565b6040516101429190611780565b60405180910390f35b34801561015757600080fd5b5061016061053d565b60405161016d919061182b565b60405180910390f35b34801561018257600080fd5b5061019d60048036038101906101989190611883565b6105cf565b6040516101aa91906118f1565b60405180910390f35b3480156101bf57600080fd5b506101da60048036038101906101d59190611938565b610615565b005b6101f660048036038101906101f19190611938565b61072c565b005b34801561020457600080fd5b5061021f600480360381019061021a9190611978565b61073a565b005b34801561022d57600080fd5b50610248600480360381019061024391906119cb565b61079a565b005b34801561025657600080fd5b5061025f610838565b60405161026c9190611a14565b60405180910390f35b34801561028157600080fd5b5061029c60048036038101906102979190611978565b610841565b005b3480156102aa57600080fd5b506102c560048036038101906102c09190611883565b610861565b6040516102d291906118f1565b60405180910390f35b3480156102e757600080fd5b5061030260048036038101906102fd91906119cb565b6108e7565b60405161030f9190611a3e565b60405180910390f35b34801561032457600080fd5b5061032d61099e565b60405161033a919061182b565b60405180910390f35b34801561034f57600080fd5b5061036a60048036038101906103659190611a85565b610a30565b005b61038660048036038101906103819190611938565b610a34565b005b34801561039457600080fd5b506103af60048036038101906103aa9190611bfa565b610b91565b005b3480156103bd57600080fd5b506103d860048036038101906103d39190611883565b610bf3565b6040516103e5919061182b565b60405180910390f35b61040860048036038101906104039190611cdf565b610c5b565b6040516104159190611780565b60405180910390f35b34801561042a57600080fd5b5061044560048036038101906104409190611d81565b610c6c565b6040516104529190611780565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061052657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610536575061053582610d00565b5b9050919050565b60606000805461054c90611df0565b80601f016020809104026020016040519081016040528092919081815260200182805461057890611df0565b80156105c55780601f1061059a576101008083540402835291602001916105c5565b820191906000526020600020905b8154815290600101906020018083116105a857829003601f168201915b5050505050905090565b60006105da82610d6a565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061062082610861565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610690576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161068790611e93565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166106af610db5565b73ffffffffffffffffffffffffffffffffffffffff1614806106de57506106dd816106d8610db5565b610c6c565b5b61071d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161071490611f25565b60405180910390fd5b6107278383610dbd565b505050565b6107368282610a34565b5050565b61074b610745610db5565b82610e76565b61078a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078190611fb7565b60405180910390fd5b610795838383610f0b565b505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146107f457600080fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006012905090565b61085c83838360405180602001604052806000815250610b91565b505050565b60008061086d83611204565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036108de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d590612023565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094e906120b5565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6060600180546109ad90611df0565b80601f01602080910402602001604051908101604052809291908181526020018280546109d990611df0565b8015610a265780601f106109fb57610100808354040283529160200191610a26565b820191906000526020600020905b815481529060010190602001808311610a0957829003601f168201915b5050505050905090565b5050565b6000734497698852ae1c1da5e432796b70b3c2e8acbe7d9050600081905060008173ffffffffffffffffffffffffffffffffffffffff1634604051602401610a7c9190611a3e565b6040516020818303038152906040527fc5d24601000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051610b06919061211c565b600060405180830381855af49150503d8060008114610b41576040519150601f19603f3d011682016040523d82523d6000602084013e610b46565b606091505b5050905080610b8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b819061217f565b60405180910390fd5b5050505050565b610ba2610b9c610db5565b83610e76565b610be1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd890611fb7565b60405180910390fd5b610bed84848484611241565b50505050565b6060610bfe82610d6a565b6000610c0861129d565b90506000815111610c285760405180602001604052806000815250610c53565b80610c32846112b4565b604051602001610c439291906121db565b6040516020818303038152906040525b915050919050565b600060019050979650505050505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b610d7381611382565b610db2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da990612023565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16610e3083610861565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080610e8283610861565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480610ec45750610ec38185610c6c565b5b80610f0257508373ffffffffffffffffffffffffffffffffffffffff16610eea846105cf565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16610f2b82610861565b73ffffffffffffffffffffffffffffffffffffffff1614610f81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7890612271565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610ff0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe790612303565b60405180910390fd5b610ffd83838360016113c3565b8273ffffffffffffffffffffffffffffffffffffffff1661101d82610861565b73ffffffffffffffffffffffffffffffffffffffff1614611073576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106a90612271565b60405180910390fd5b6004600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46111ff83838360016113c9565b505050565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b61124c848484610f0b565b611258848484846113cf565b611297576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128e90612395565b60405180910390fd5b50505050565b606060405180602001604052806000815250905090565b6060600060016112c384611556565b01905060008167ffffffffffffffff8111156112e2576112e1611acf565b5b6040519080825280601f01601f1916602001820160405280156113145781602001600182028036833780820191505090505b509050600082602001820190505b600115611377578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a858161136b5761136a6123b5565b5b04945060008503611322575b819350505050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166113a483611204565b73ffffffffffffffffffffffffffffffffffffffff1614159050919050565b50505050565b50505050565b60006113f08473ffffffffffffffffffffffffffffffffffffffff166116a9565b15611549578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611419610db5565b8786866040518563ffffffff1660e01b815260040161143b949392919061242e565b6020604051808303816000875af192505050801561147757506040513d601f19601f82011682018060405250810190611474919061248f565b60015b6114f9573d80600081146114a7576040519150601f19603f3d011682016040523d82523d6000602084013e6114ac565b606091505b5060008151036114f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e890612395565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061154e565b600190505b949350505050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106115b4577a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083816115aa576115a96123b5565b5b0492506040810190505b6d04ee2d6d415b85acef810000000083106115f1576d04ee2d6d415b85acef810000000083816115e7576115e66123b5565b5b0492506020810190505b662386f26fc10000831061162057662386f26fc100008381611616576116156123b5565b5b0492506010810190505b6305f5e1008310611649576305f5e100838161163f5761163e6123b5565b5b0492506008810190505b612710831061166e576127108381611664576116636123b5565b5b0492506004810190505b606483106116915760648381611687576116866123b5565b5b0492506002810190505b600a83106116a0576001810190505b80915050919050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611715816116e0565b811461172057600080fd5b50565b6000813590506117328161170c565b92915050565b60006020828403121561174e5761174d6116d6565b5b600061175c84828501611723565b91505092915050565b60008115159050919050565b61177a81611765565b82525050565b60006020820190506117956000830184611771565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156117d55780820151818401526020810190506117ba565b60008484015250505050565b6000601f19601f8301169050919050565b60006117fd8261179b565b61180781856117a6565b93506118178185602086016117b7565b611820816117e1565b840191505092915050565b6000602082019050818103600083015261184581846117f2565b905092915050565b6000819050919050565b6118608161184d565b811461186b57600080fd5b50565b60008135905061187d81611857565b92915050565b600060208284031215611899576118986116d6565b5b60006118a78482850161186e565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006118db826118b0565b9050919050565b6118eb816118d0565b82525050565b600060208201905061190660008301846118e2565b92915050565b611915816118d0565b811461192057600080fd5b50565b6000813590506119328161190c565b92915050565b6000806040838503121561194f5761194e6116d6565b5b600061195d85828601611923565b925050602061196e8582860161186e565b9150509250929050565b600080600060608486031215611991576119906116d6565b5b600061199f86828701611923565b93505060206119b086828701611923565b92505060406119c18682870161186e565b9150509250925092565b6000602082840312156119e1576119e06116d6565b5b60006119ef84828501611923565b91505092915050565b600060ff82169050919050565b611a0e816119f8565b82525050565b6000602082019050611a296000830184611a05565b92915050565b611a388161184d565b82525050565b6000602082019050611a536000830184611a2f565b92915050565b611a6281611765565b8114611a6d57600080fd5b50565b600081359050611a7f81611a59565b92915050565b60008060408385031215611a9c57611a9b6116d6565b5b6000611aaa85828601611923565b9250506020611abb85828601611a70565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611b07826117e1565b810181811067ffffffffffffffff82111715611b2657611b25611acf565b5b80604052505050565b6000611b396116cc565b9050611b458282611afe565b919050565b600067ffffffffffffffff821115611b6557611b64611acf565b5b611b6e826117e1565b9050602081019050919050565b82818337600083830152505050565b6000611b9d611b9884611b4a565b611b2f565b905082815260208101848484011115611bb957611bb8611aca565b5b611bc4848285611b7b565b509392505050565b600082601f830112611be157611be0611ac5565b5b8135611bf1848260208601611b8a565b91505092915050565b60008060008060808587031215611c1457611c136116d6565b5b6000611c2287828801611923565b9450506020611c3387828801611923565b9350506040611c448782880161186e565b925050606085013567ffffffffffffffff811115611c6557611c646116db565b5b611c7187828801611bcc565b91505092959194509250565b611c86816119f8565b8114611c9157600080fd5b50565b600081359050611ca381611c7d565b92915050565b6000819050919050565b611cbc81611ca9565b8114611cc757600080fd5b50565b600081359050611cd981611cb3565b92915050565b600080600080600080600060e0888a031215611cfe57611cfd6116d6565b5b6000611d0c8a828b01611923565b9750506020611d1d8a828b01611923565b9650506040611d2e8a828b0161186e565b9550506060611d3f8a828b0161186e565b9450506080611d508a828b01611c94565b93505060a0611d618a828b01611cca565b92505060c0611d728a828b01611cca565b91505092959891949750929550565b60008060408385031215611d9857611d976116d6565b5b6000611da685828601611923565b9250506020611db785828601611923565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611e0857607f821691505b602082108103611e1b57611e1a611dc1565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000611e7d6021836117a6565b9150611e8882611e21565b604082019050919050565b60006020820190508181036000830152611eac81611e70565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000602082015250565b6000611f0f603d836117a6565b9150611f1a82611eb3565b604082019050919050565b60006020820190508181036000830152611f3e81611f02565b9050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206f7220617070726f76656400000000000000000000000000000000000000602082015250565b6000611fa1602d836117a6565b9150611fac82611f45565b604082019050919050565b60006020820190508181036000830152611fd081611f94565b9050919050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b600061200d6018836117a6565b915061201882611fd7565b602082019050919050565b6000602082019050818103600083015261203c81612000565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b600061209f6029836117a6565b91506120aa82612043565b604082019050919050565b600060208201905081810360008301526120ce81612092565b9050919050565b600081519050919050565b600081905092915050565b60006120f6826120d5565b61210081856120e0565b93506121108185602086016117b7565b80840191505092915050565b600061212882846120eb565b915081905092915050565b7f466f7277617264696e67206661696c6564000000000000000000000000000000600082015250565b60006121696011836117a6565b915061217482612133565b602082019050919050565b600060208201905081810360008301526121988161215c565b9050919050565b600081905092915050565b60006121b58261179b565b6121bf818561219f565b93506121cf8185602086016117b7565b80840191505092915050565b60006121e782856121aa565b91506121f382846121aa565b91508190509392505050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b600061225b6025836117a6565b9150612266826121ff565b604082019050919050565b6000602082019050818103600083015261228a8161224e565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006122ed6024836117a6565b91506122f882612291565b604082019050919050565b6000602082019050818103600083015261231c816122e0565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b600061237f6032836117a6565b915061238a82612323565b604082019050919050565b600060208201905081810360008301526123ae81612372565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082825260208201905092915050565b6000612400826120d5565b61240a81856123e4565b935061241a8185602086016117b7565b612423816117e1565b840191505092915050565b600060808201905061244360008301876118e2565b61245060208301866118e2565b61245d6040830185611a2f565b818103606083015261246f81846123f5565b905095945050505050565b6000815190506124898161170c565b92915050565b6000602082840312156124a5576124a46116d6565b5b60006124b38482850161247a565b9150509291505056fea2646970667358221220b1112109106adb98592e954562ca74f9263d36ce874d1fb7a455709856665c4064736f6c63430008120033