# Self-Service Terraform: 8 Modules That Killed 60% of Our Platform Tickets

> Self-Service Terraform: 8 Modules That Killed 60% of Our Platform Tickets Platform teams do not fail because they hire the wrong people. They fail because the right people spend most of their time…

Source: https://zop.dev/resources/blogs/self-service-terraform-8-modules-60-percent-platform-tickets
Published: 2026-05-13 · Author: muskan-bandta · Tags: platform-engineering, terraform, infrastructure, iac

---

<div class="article-body">
<h1>Self-Service Terraform: 8 Modules That Killed 60% of Our Platform Tickets</h1>
<p>Platform teams do not fail because they hire the wrong people. They fail because the right people spend most of their time fielding the same eight requests over and over: provision a new service on EKS, add an RDS instance, create an S3 bucket with the right IAM policy. The requests are not hard. They are just constant.</p>
<p>We measured this across four platform teams. The average ticket took 2.3 hours to resolve end-to-end, counting the back-and-forth clarification, the Terraform write, the PR review, and the apply. A developer filing the ticket waited a day or two. The platform engineer context-switched twice. Nobody was happy.</p>
<p>The fix was not hiring more platform engineers. It was building a self-service Terraform module library: eight opinionated modules that developers invoke directly, enforce sane defaults without asking, and apply through a PR workflow that never requires a platform engineer to be in the loop.</p>
<p>Within 90 days of rolling out those eight modules and wiring them to Atlantis, ticket volume dropped 60%.</p>
<h2>Why Platform Teams Drown in Repeat Tickets</h2>
<p>The slow path for infrastructure provisioning <a href="https://zop.dev/resources/blogs/automated-cloud-scheduling-non-prod-environments">looks like</a> this:</p>
<div class="d2-diagram"><img src="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIGRhdGEtZDItdmVyc2lvbj0iMC43LjEiIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaW5ZTWluIG1lZXQiIHZpZXdCb3g9IjAgMCA0MjQgMTIwMyI+PHN2ZyBjbGFzcz0iZDItMzk4Njc5NDU0MSBkMi1zdmciIHdpZHRoPSI0MjQiIGhlaWdodD0iMTIwMyIgdmlld0JveD0iLTEwMSAtMTAxIDQyNCAxMjAzIj48cmVjdCB4PSItMTAxLjAwMDAwMCIgeT0iLTEwMS4wMDAwMDAiIHdpZHRoPSI0MjQuMDAwMDAwIiBoZWlnaHQ9IjEyMDMuMDAwMDAwIiByeD0iMC4wMDAwMDAiIGZpbGw9IiNGRkZGRkYiIGNsYXNzPSIgZmlsbC1ONyIgc3Ryb2tlLXdpZHRoPSIwIiAvPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCFbQ0RBVEFbCi5kMi0zOTg2Nzk0NTQxIC50ZXh0LWJvbGQgewoJZm9udC1mYW1pbHk6ICJkMi0zOTg2Nzk0NTQxLWZvbnQtYm9sZCI7Cn0KQGZvbnQtZmFjZSB7Cglmb250LWZhbWlseTogZDItMzk4Njc5NDU0MS1mb250LWJvbGQ7CglzcmM6IHVybCgiZGF0YTphcHBsaWNhdGlvbi9mb250LXdvZmY7YmFzZTY0LGQwOUdSZ0FCQUFBQUFBK0lBQW9BQUFBQUYzUUFBZ3VGQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCUFV5OHlBQUFBOUFBQUFHQUFBQUJnWHhIWHJtTnRZWEFBQUFGVUFBQUFyZ0FBQVBnRWhRV1paMng1WmdBQUFnUUFBQWpNQUFBTHRHbURkNlpvWldGa0FBQUswQUFBQURZQUFBQTJHMzhlMUdob1pXRUFBQXNJQUFBQUpBQUFBQ1FLZndYbmFHMTBlQUFBQ3l3QUFBQ2VBQUFBb0ZET0JvMXNiMk5oQUFBTHpBQUFBRklBQUFCU1BuWTdWRzFoZUhBQUFBd2dBQUFBSUFBQUFDQUFRQUQzYm1GdFpRQUFERUFBQUFNb0FBQUlLZ2p3VmtGd2IzTjBBQUFQYUFBQUFCMEFBQUFnLzlFQU1nQURBaW9DdkFBRkFBQUNpZ0pZQUFBQVN3S0tBbGdBQUFGZUFESUJLUUFBQWdzSEF3TUVBd0lDQkdBQUF2Y0FBQUFEQUFBQUFBQUFBQUJCUkVKUEFDQUFJUC8vQXU3L0JnQUFBOWdCRVNBQUFaOEFBQUFBQWZBQ2xBQUFBQ0FBQTNpY2hNMDdLMFlCQUlmeDMvRWU5OWY5Zmo4NEpsbmtDeEJsa3FUTU1za2ltMi9rc3NwbEVSL0ZydGlVNWE5TXNyelAvS3NIaFlZQ1RhVjMxQ3FsVW1YVm1uVWJ0dXpZdFdmZmdVTkhqcDA2ZDVud1IyM2EvcWRPbkxsSThwYnZmT1V6SDNuTlM1N3psTWM4NUQ1M3VjMU5yblAxKzI5ZFlVVnR5YkkyRGFWMkhUcDE2ZGFqVjFPZmZnTUdEUmsyWXRTWWNSTW1UWmsyWTlhY2VRc3FpL3dBQUFELy93RUFBUC8veE5Fd0F3QUFlSnhrVm4xc0crWDkvejZQejNleFl5YzVuOCt2OGV2RmQzWWNPN0hQWitmRnFaUEdjZEkwYnBLR3ZrR2FRUFg3cldGdDA2cE4xd0RwUUlMQk50eVZrV2gwWXdNMERlMUZiQ3JxSmhXMmJOcWt3U29xSWEwdzlzZDQwMUEzZ2NZOEZDSFVKdWZwT1R0Sm8vMWhQNWIxM1BmbDgvTDlIdWhoSEFBZndjdWdBd00wZ2dWNEFKa05zQ0Zaa2dRbUkyY3lnbDJYa1JETGpHT0wrdUtQcEFnVmlWQ3Qva3UrQjJkbVVIRWFMNjhmdjZkNDVNam5NejA5Nm5PdnZLcGVRR2RlQmNDVld3QjRBSmZBQUN3QXg4aVNLRW9DVGVzNG1STWtnYm5aOUdTajJXMm1UTTViMTErKy92M3c2MkUwa3MwbTV1VFVDZlZydUxRKy8reXpBQUE2S0FMZ0xDNEJDeTRJa3Rya3BNM0dXMm1HMXc1YTBNbkp0SklTQllHVms5cFpmRDkvdkM4V1RnN2tUdy9OREtZVHlWUmg4b0ZzN3lRdWVRcTU2R1FqWmQ3ZFAzQlhCRDNSS29oKzllREJhQWdBYTNsR2NRbU1WUVJxV1doQmtwTnBFcDhFdnZwL1QwK01YN3czMXR3NUdZOVBkamJqVXY3aXFWTlBENTBMVCszWmN5Z0VBSWpFUWYvR0phalhjT1FEdk13TGZJQXZva3ZxN2ZmZVE0MjR0UGpvUTk5WjNMaUw5MjNjbFhsWmtWbUJGZGppMG9mTHl4L2kwdTNiNi9Pb1NTMXYzaVgxY2RwZHppNkxva0x1NnlUQlp1UDU0ak0vNjZPb2hoSTU5R1pjVW4velZPcVI3cHZyODJqd1crbkY3bi9BUm84ZHVBUW1zRzdyVWVBM3NmdGcrR3loTUQ4NE1ielFsODNqa2pRMU5ucWsvVjIwZDFadWhjMFlrN2dFRFdDL2t3MUNLb2xTcGFMNHllRHBmRTVaZnZIOHhHaDNiMi8zS0M2RkR1NFpQbXhYYjMveUNibzMwZEVoa3A2Y0FKakRKV0JJSkVFSjhBSjcvUXE2ZFFVM0xTNnVrN1lCUVFPQXpvOUxFQUNRZFRKbnM5bmxkRHJEM2ZGTEoraXEybUowVHp6d1RJeHVvQ2tqWnl5Y0x4ZzVJOFdZbWRpRitWZjY2c3g2aWpiWDllS1MrcVo4TkpVNktxT0UrbVppVmxHT0psRmlmUjZGeFdKTFMxRlUvd29ZV2l1cjZDMjBCazRRQU94QlVVbWxNNklvQkdsR1NxZmxwSTFuQlpJdmsweG5GSnJtcmJiZjVzY2ZXOEpDeE5mWG9yUWY2NTc1MG9LUjhnM1ZPVVBjbnF6UGRDQzM1MkJqUUhMdzkzbGE1azZySDhuTndtazdkOEFZOVRqc1dvOHRsVlcwZ3RiQUJhQVBpaVFkeVdKblNFcmVhcE9UNll5ZHBwRno4R1QvOEZmeThhSG1RY0d2NUhJZGpqalhIZHB2NmoyN2QzSysxMnVmOFl6Mjl4WDV4bnY5N2lwWFVtVVZyZUVWNE1DLzBZY1dXQ0xDMmV4QXJLWDViT3BrejB3cTB1bWtseGFNbEt1QUhaS0ZpMXFGZEx2cHlRY216dTVvZG96K2RIMGc0UklXck00M0xBMERRN3NHQVd1MWY0ald3QUcrYmRWcnFnalliSEtTMUs2VFV5UUw4ZzJkM2psd3ZHZm9jRHVGMVhlTWhZU1NUb2pUMzdzaXRRWFRwaDN6ZXlmbWM3bGplUzVrU011QlF5NHY2bzRvN1ZVZE9BRFFQTDVHVHFLVnpCWklXdm5FWnV6ZE8zZTJqQS80VWsxdXM4dms5aDQ2aE02ZjBMdVYvU2tUZlZ5dkQ0amVNK3FqWktZRUt6SE1vRFZvaHg0WTBaQVJsUlFCZ2hDdGJMUmdsM21oWnBDZ3BQRkFxTGZTdEs2cWNnMDBycWI0b0toZCtheDd1bk9JYy9zZHJrajN0TklXK05VWVkwZ2R6SGg4bG1Ca2ZPcSsvT0tJUjVJOEhrbUtKUHVra093TW1OeTlOMXlkYmRrd1pRNzczTWtteXBLUFpzZkNwbVAxUVd2WFNJdXgwY1paZWdia2lUaTYxaHFSSXVGd3BGVmRhbkhhbTNRNmg3UFpVOFdtbjVDTlYycXU1cGtOa2JKYWxRemJ2OFEwNzA1TzdGcnkrSnZERHJ6eTBpRm45TmhoOVRvS3BNTk91L295VkNxUUFZQjM4UTBzZ2dnQURFand6YzNZWHJ3Q0ppMDJLMmRrNG5XRzc3OUkvZUNGWC96NitWTTV2S0xPL2ZHNityZmZEejFJN2xkV2tRV3ZRR05WY2F6TWJncjRUNk05UzZ4Qno5QVdVOGgwejI0c3JMOWp0eUIwUXM5VTgrZzhhRTN6T1NzVGF4TjJ0M1hDYko3OXhGK0ZoTkxQQlVZUzQ3dVhQUDVRQi9scVIrVStYeXdhRGlZMjJ1dFFYNjRkR3ppaHRScE90UngzNHJSZ3BQekZUYUJRT2VlTmJjT3BxbmROTzQzZy9oKzkwOUlkeWtDMjNNbDgvbVF1TjVmUHorVmk4WGdzSG92VnZObzdQN24zYk8rNVlsLy9LTEVzaWR0ZkdjWTJ0QVljZUFIc1c5VnA4aE1sTzY4cFRRaVN2VWZxOU95UzdwN056cVQ5V1pkK1RFenZqN1phdzFmeFR4SXU0UnRuOWkzazNNNnhiNk9Xd3VqanNUY3NEVFVlMFVXMEJwWnQrRmJkVSszY1BTcnl6VWFIMmRuVTNHdEY1UVBKaEY3L01FVkZrdW9IZ0lDdnJLTG4wUnBJR3E5U2hqaGIyNHRTSEN1cHJXQzgxV2IzWXQ1SzMwZ2NGWGNHYzc2QTF4TjNlWHZDOSsvck91RGI2VXE1dXJwRWYyOWsxaVQ2cHB4dU84ZmFPS09wcFNzeXVGOXlITFRhSkllem9WN29pZzhjcm1xYnJheWlPVHhQdG8wK0tDcUtvR1F5c3JaVXR3WWpUSTNsUjlrSHo1MFRQQ2FuMGM1bFRGL2VmKzBFL2RoaloxNXZEZEhVTWRwVWpaV3RyS0l2VUpud3YwMmJiRzBjL21WaTE1TFgzeXphbGhicWRiNFIwN0hES0tXK3IwUmNIalNzTmcyRzJnQVJINkFLS29OWjIwZjIyaGJLeUxvclAxN3VJeHZId0JuN0wvd1FsVDhPRlNXcEdQcFliZHFZWDdpTXlyVTl0dlhjSFJHRTJqc1N3eXd2UHQxQkcybUtNUnN5RDNjYUdobUtNVER0WHovM1Vvd3hNeFJUejdTaDhzM1FzQ2lPQ0RlMWN6aDBVMjE2VFNpRXd3WGh0WTI5aVZaUm1leFltWlB1U01QWXQvSTBYTHI0WEp2UlpxVHFMSFhCUzA5OTk3a09rOTFFR2F3R0NlRlB4L2tvejBmNThjcC85dkp0UEIrMTdTVnhUWlVkYUIyVmlmcTNkSkRKYklPaUFTL1lBbzB1eGxJWENodVozeTBQMVZ1TVZCMXJ5RjU0eWQ0NTlnZWFPb1gwTFI0WCt2dmJ3VUpJR0JMZVZ1dDM3R3V0Y3VRRlFCL2hKNkFaUUZaMjRLcWRhbnRYY3dPWmJqSWZtamhmU0VTQ0djZDQrNUY4YmxycG1VbzVzclpIN2lxZXZ6L1ducEJjWTBrNWVVK3ZjdkprV3FkZkpQN2lBTkFYK0NFd0VQWTVtVXg2QWdHbkJCU09ERTJCZitGeFBhSk1yb2FrK3E5Ly9uTFhMbFIzMURmaGRhWGQ2dHlsLzBkZlZTK2N1a1RxaThJMUZFQUowQUZrRkptUGZuNXRkcGI4SDRScDlDbE9rM2U1akNJb3NsSVY2Wjh2WHo1KytmTDAxZG1yVjJldjFud0liNkV5ZVo3TTAvNGxWRmFiQUZWK2pydGdFdDhnejdQYXBxNmFQeFNQaDBMeE9PNXFGWVJXOG9IL0FnQUEvLzhCQUFELy83Z2piMDRBQVFBQUFBSUxoWTdiL3ROZkR6ejFBQUVENkFBQUFBRFlYYUNFQUFBQUFOMW1MemIrTi83RUNHMEQ4UUFCQUFNQUFnQUFBQUFBQUFBQkFBQUQyUDd2QUFBSW1QNDMvamNJYlFBQkFBQUFBQUFBQUFBQUFBQUFBQUFBS0hpY0hNb2hic0pnR01ieC8vczBXYmFzNmJxc1d6cFQwWHdKQ1FVTkNhMTRQVitDQUlGQWNnb0VOOEJqOFJnc0Y4QnpHMHhKOEQ5ZFdIQURkZjFERzZKMlJBV2lUa1FkaVZvU3RTVnF4SDh5SnRNWFE3c1QxREhRRzhGV2xQcWoxZ3kzZ29rQ2JoV2VySEcxdUpxWGRUdmdkdVhYOW54clNxdFAwdVNkVWlMVEI2bHlLdVg4Mkp4R09iVVZPUFRuSndBQUFQLy9BUUFBLy8vajJoV2VBQUFBQUFBc0FDd0FVQUNFQUtnQXZnRFVBUFlCR0FFK0FWQUJpZ0hDQWU0Q0lBSlVBbm9DNGdNRUF4QURLQU5FQTNZRG1BUEVBL1FFRkFSUUJIWUVtQVMwQk93RkdBVklCWFFGbUFXa0JiZ0Z4QVhhQUFBQUFRQUFBQ2dBa0FBTUFHTUFCd0FCQUFBQUFBQUFBQUFBQUFBQUFBUUFBM2ljbkpUUGJodFZGTVovVG16VENzRUNSVlc2aWU2Q1JaSG8yRlJKMVRZcmg5U0tSUlFIand0Q1FrZ1R6L2lQTXA0WmVTWU80UWxZOHhhOFJWYzhCTStCV0tQNWZPellCZEVtaXBKOGQrNzU4NTF6dm5PQkhmNW1tMHIxSWZCSFBURmNZYTkrYm5pTEIvVVR3OXUwNjF1R3F6eXAvV200UmxpYkc2N3plYTFuK0NQZVZuOHovSUQ5NmsrR0g3SmJiUnYrbUdmVkhjT2ZiRHYrTXZ3cCs3eGQ0QXE4NEZmREZYYkpERyt4dzQrR3QzbUV4YXhVZVVUVGNJM1AyRE5jWncvb002RWdaa0xDQ01lUUNTT3VtQkdSNHhNeFk4S1FpQkJIaHhZeGhiNG1CRUtPMFg5K0RmQXBtQkVvNHBnQ1I0eFBURURPMkNMK0lxK1VjMlVjNmpTenV4WUZZd0l1NUhGSlFJSWpaVVJLUXNTbDRoUVVaTHlpUVlPY2dmaG1GT1I0NUV5SThVaVpNYUpCbHphbjlCa3pJY2ZSVnFTU21VL0trSUpyQXVWM1psRjJaa0JFUW02c3JrZ0l4ZE9KWHlUdkRxYzR1bVN5WFk5OHVoSGhTeHpmeWJ2a2xzcjJLeno5dWpWbW0zbVhiQUxtNm1lc3JzUzZ1ZFlFeDdvdDg3YjRWcmpnRmU1ZS9kbGs4djRlaGZwZktQSUZWNXAvcUVrbFlwTGczQzR0ZkNuSWQ0OXhIT25jd1ZkSHZxZERueE82dktHdmM0c2VQVnFjMGFmRGEvbDI2ZUg0bWk1bkhNdWpJN3k0YTBzeFoveUE0eHM2c2lsalI5YWZ4Y1FpZmlZemRlZmlPRk1kVXpMMXZHVHVxZFpJRmQ1OXd1VU9wUnZxeU9VejBCNlZsazd6UzdSbkFTTlRSU2FHVS9WeXFZM2MraGVhSXFhcXBaenQ3WDI1RFhQYnZlVVczNUJxaDB1MUxqaVZrMXN3ZXQ5VXZYYzBjNjBmajRDUWxBdFpERWlaMHFEZ1JyelBDYmdpeG5HczdwMW9Td3BhSzU4eXo0MVVFakVWZ3c2SjRzekk5RGN3M2ZqR2ZiQ2hlMmR2U1NqL2t1bmxxcXI3WkhIcTFlMk0zcWg3eXp2ZnVoeXRUYUJoVTAzWDFEUVExOFMwSDJtbjF2bjc4czMxdXFVODVZaVVtUEJmTDhBelBKcnNjOEFoWTJVWTZHWnVyME5UTDBTVGx4eXEra3NpV1EybDU4Z2lIT0R4bkFNT2VNbnpkL3E0Wk9LTWkxdHhXYy9kNHBnanVoeCtVQlVMK3k1SHZGNTkrLytzdjR0cFU3VTRucTVPTCs0OXhTZDNVT3NYMnJQYjk3S25pWldUbUZ1MDI2MDRJMkJhY25HNzZ6VzV4M2ovQUFBQS8vOEJBQUQvLy9TM1QxRjRuR0pnWmdDRC8rY1lqQml3QUFBQUFBRC8vd0VBQVAvL0x3RUNBd0FBQUE9PSIpOwp9Ci5kMi0zOTg2Nzk0NTQxIC50ZXh0LWl0YWxpYyB7Cglmb250LWZhbWlseTogImQyLTM5ODY3OTQ1NDEtZm9udC1pdGFsaWMiOwp9CkBmb250LWZhY2UgewoJZm9udC1mYW1pbHk6IGQyLTM5ODY3OTQ1NDEtZm9udC1pdGFsaWM7CglzcmM6IHVybCgiZGF0YTphcHBsaWNhdGlvbi9mb250LXdvZmY7YmFzZTY0LGQwOUdSZ0FCQUFBQUFBK2dBQW9BQUFBQUdDQUFBUmhSQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCUFV5OHlBQUFBOUFBQUFHQUFBQUJnVzFTVmVHTnRZWEFBQUFGVUFBQUFyZ0FBQVBnRWhRV1paMng1WmdBQUFnUUFBQWpoQUFBTVdHUnlWSzFvWldGa0FBQUs2QUFBQURZQUFBQTJHN1VyMm1ob1pXRUFBQXNnQUFBQUpBQUFBQ1FMZUFqTWFHMTBlQUFBQzBRQUFBQ2dBQUFBb0VuU0JLeHNiMk5oQUFBTDVBQUFBRklBQUFCU1FYNCtRRzFoZUhBQUFBdzRBQUFBSUFBQUFDQUFRQUQyYm1GdFpRQUFERmdBQUFNbUFBQUlNZ250VnpOd2IzTjBBQUFQZ0FBQUFDQUFBQUFnLzhZQU1nQURBZUVCa0FBRkFBQUNpZ0pZLy9FQVN3S0tBbGdBUkFGZUFESUJJd0FBQWdzRkF3TUVBd2tDQkNBQUFIY0FBQUFEQUFBQUFBQUFBQUJCUkVKUEFBRUFJUC8vQXU3L0JnQUFBOWdCRVNBQUFaTUFBQUFBQWVZQ2xBQUFBQ0FBQTNpY2hNMDdLMFlCQUlmeDMvRWU5OWY5Zmo4NEpsbmtDeEJsa3FUTU1za2ltMi9rc3NwbEVSL0ZydGlVNWE5TXNyelAvS3NIaFlZQ1RhVjMxQ3FsVW1YVm1uVWJ0dXpZdFdmZmdVTkhqcDA2ZDVud1IyM2EvcWRPbkxsSThwYnZmT1V6SDNuTlM1N3psTWM4NUQ1M3VjMU5yblAxKzI5ZFlVVnR5YkkyRGFWMkhUcDE2ZGFqVjFPZmZnTUdEUmsyWXRTWWNSTW1UWmsyWTlhY2VRc3FpL3dBQUFELy93RUFBUC8veE5Fd0F3QUFlSng4Vm05c1crWDFmczk3Yis1TkhNZUpmZTNyMmszaTJLOTliK0xjT0ltdjdSdTNzUlBubjUzRXp0ODZCSm80TGFVdGFVUHhyd1YrWXkzalR5VTIwT2lNaEVEakM1UFlKaWFrZ1ZxKzhHRWdBUk1Sck5JMmxZbU5EV2tVQW11SEdGWlhBVnF1cDN2dEpFNC83TXZOcStoOXozT2V4K2M1NTZBYTVFVUluOExQSUFyVm9VWmtRVGFFWk01TlViS2lFRHNsaXlKaFdVWGtPTmI3R0t3LzlqdzlmTWRuN1QvN1ZuTFJ5VWQvTmZuUFF5L2paemJYNEpIbGh4OVdELzdvNk5IYnJsOVgvZkNuNndnaGhFdnZJd1FmNEFLcVEyYUVPRllXQlVFa0RBTWdjMFFrN05WOWJ4dG9BMDA3WmZWM2NOY2Q2Vm5MRjZ2d1lENGZPdEVYUGE3TzRzSm0vdkpsaENoRUVNSnR1SURNeUttZFpVNE84allydzdBc3IvOGxsQnlNaEVNQzJUbVE4NitzckhVT2UwRWVTNTZiMnBmTDNURTZjZkRrNmR5cHpQaDl1RENSbEVha1d0cVk2QnRmbHVDQnBOSVYzTHcybWc3RzlMeDF2SWllTjFlRlJrUTVHTm1LL3Ywbm5zcStjTy9DUXZiYzhQRWpFVno0NFlQLy85clJ3UVBQSGw1ZTFXS0FIcU1KRjFDOXJpZnJabVdXc0c2V25JY1REZXBWLzllbXIyUVFUTGlRK0dEbzVsRGwvdXJXZlpseWN6SkZPRGRGemsvMVFYdGY1dnpVZ1BwaEhCZlU2MkRiekVPZnVsNTVjd3dYS2xseWRqa1NVYlIzbEtZeXE3MTkxazh6SnNQbzVQbk1NNTAwMDJnWXd3VjE2WW5lZTJSWTJzekRpMC9KSjRMcUM5dWN1M1I4YXpWblFuRTdrcjYrZEhyaTBRT3JvY1RLMFJQcDFGRmNtRmlZT2Q2cmZnUEptZW1vdktPZGlBdW9BZkU3Y1ZpT1VMc2l2YmIwZjZmbXo4eXZuVlpHanVUdW1rd2R3b1d4K1lPbnpPcFY0TlZya0owYmkzU1hkVnhHQ0lkeEFiRmFOS0s0V1VMOTh2NDNHdUQ5aGpmdng1bmg0YzFMNVhzckNGRVNMaUIzV1QrR1ljdHFjTHpWVmo0Qm9VSVJSVmRtcFc3R1FGRTBiZS9oZjU2c0E5cmFhYjJRVVl0SFdBeTB5VzIraEF2cWM2RzFjSGd0Qkt2cWM2R1RrY2pKRUt4dTV1RnA3N1FvcGtYMVhwMnJXTG9CMzBBUldUWFdkbzhRRHNXeEhPVHRzaUpUUkVNU2d4RkZFUVRpTVdHYmxiODBtSlltY3JJWU05TmMvUEJBTFUwV0xjSzBWN0lGbTczRFlWZXY4V0IyN01FbHVkMGRVNTBwWC9kZ29QdlBnc2Mvdmh3Y2lKVTUra28zNENJVVVmTXVORllEWUJpYmxaZURFY1hPTUI5TzN5VmxEb2VsZnI2TEUxcDZGaUxSZlcwUjN1UE1HSTh0ajV6SmRuc2NQWGJiU0g1NGFNeHBEbHA5YUlzTEZ2RTZzbWtkWVJlWC8wMW1uNFZxRWpLRkNwc3AzNjFzeExhVk56YjdicVdEZFM1dlFoRTVrYThhVDY4V044TnZjYUZrM1hJYXcwOFhWcnNtbDNxVVJLdXhSbjJucm0zWTN4SzF0N2JNL3JTRUtVc0hDZWVNSnc2UDV1ZWt3RXl3V1RZTnpQZ2NadG5tQWwvOW5vYm1YbGNXQWVwRUNKN0NWNUJkcjZVQkhJbnM2TWRxQnFVNnN3UDFpYWJHcVpqVGI5bHIyR3QyZDlTYTd6UWV5Y0pMMFpyWmlmbUdlb1UxQkR2bjQrcWlwaG1VdkZDRUluS2hnTTVCVk1wNUt3eERkbGNEdzFDNzFIdTVkNEY0bTBmYjR4TW1oM0NnT3piVE9iN1VLOFRORkRkd2pEc1RKYk9lVHI2M21TVGsxdTYvQ2kxaHV5YzllTGNnTFdTSDc3czlxTlVIdFhJTTNKMyszd3VlanJIRm52Mzd5L1hoUWdnK3hPdklvWHVBMVJ5Zys0K2xDS2ZKcU5Ha1hCY3lQVTEweDV3VUQ5ZkcwLzAwbldwT0JVYngrdlVZNlU3MHVienFleUJaOXpSTStnUHFTNldTRmhOOWh5OWlBUWtJSVFhSnFSMnNML0U2TXBiOXB1RnhSR1JaMTRYTUlmenQ0bHYzVHkzbm5YaGRiUUY0WC8zc3k5Tm5FU0NwZEFOOWg5ZVJSVk1ySEZKMG45cXNsWi82bmdSek52TVFnSmxpV0REd3hnR3pBNS9jZkpxdG95eUE5OVAwTmk2K0JrWGtMM01zVTdSWGlESzdtRmFUUGp6QTBzSzhzSyszcG52UkY0dlFkRHdUbytta0xTV05haHFNOGFuT1VkZ1k5L1lxN1pLYzZETzNXcXQxMkRudDZBeEZ0S2M2aDF0bDFoQTc1Z0s3Vk5ZUmJoVjUyMy93RVJSUkkycXA5b1BOYXNKaVpleVVUWDVsT2lkTjVJTFRLOUprenQ4MUswZUMyc2Q0OThIUk05bEErVHM0bEI4WlNnN25SNGJHOURsOHN5VER2NkJZOWpaYmxiRUpFNCtnVFhndUdNZGxDRzJtR3A0Y1lDaGZOcUJiUENqMGM5amkrb1YzT056YTArR1pKUUdyZkJsZkduUjFWUXp1dXZzRkFQLzRzaHlQK1lVdmZPNmQramdIUmRSVXBaR2RGYmEwcWFkYjBsME8yOTRtcHpmdGlzSEdzaFNyRzZrZDJLOWVSbEQ2VCtrR1BBUkZKRmE3S2h3U1JFRUloNnBOYTdQeTl2SUs4R0x2c3FQSFBpajRZeDE5Z2FnMExnVW1tZ09jN0JaNkkyM3hVTStjTWRRdXVOb0R4Q202blBHT3pvVFAyOXB1ZFhhNVdnV0xwMS9xR3ZGcE9mZVhic0FpWHR2dXJ4RkY2eEt5M2htcSt1dnJneUVhb3NuNnREZXg5Nnp4b1NqVjdERTU2ODFOM2NhQnJrWm5BMWlpTlk4L0hsZXZXU3l0cllZYWhXM1VZdmVWYnNCWHNLRjVjeXYyVHZWemxSYjc4blpscGxxUzBtaGFHeEx0QjR4RGl0bkZRVVM5d2ptMGtvRkYxVGxCNUxMTyt4R0N2OE1HYWtCSWN5SFBWN1lBZUN5Wjl0SU1UWnU5M0U4eTZpWnNxSitUU2VJZDk0SkRkWmJmamlHRTM0VU5mV1pXdjkwNVVZUXE3MndzdFVyU1RRQkFOKzV0ZW1UU2pMVko2V3g2T1BXM0ZaUCszNWJHQjJCRC9jUXo0dkdNZUtDMTZ1UUVBMGw1dlNtaTNrUlF1b0lRL0xHc0ErRkUyVjZCVW1UV1RpcjdJY3RLZnprNDVhODFzWFJqVzJOMmZ2M0l0RlJyTnRCTkhpNEgrTk0xWHJSWk8yeHIvLzc2TkIvZ2VjbCtCaUVvdlZYcWhxdXdnWndJc1hyTjZJMTRseUltekJqYVRBNkx4WmR3V09iVFFrMHRSWnQ5bGgrbjFVOGMrMU4vWU5sb1hTeEk0SFAxSzNlR2tMUUh6SnRmZDJja1hhdlNUWVRnSGZ5a0ZwOG9jYXBpRm5IYlNLeWJOZFFldXBEcmxzTnRDWThvM2RZenQraWZPemNQVm1OZzl1eWR0d2VrZnJlclIraTRmU1NjTzVSUERXbWUxd3JqTXY0Qk1tZzdsNXNvYmdWa1NtYUpUMVlpNVUwRkpsTkUvVWNkNUE3TXpCdm4xZEp2QmNiQzB0WjI2NnNoZUY3TngrTy9hVW00bTBON3RuYk9qOEVBRGtRaHBBbEtqQjgxZkx3MUczclFjWGdQKzdYOVVnbVRzQnlXYmJLTjJENys5U3Y5cjd4Ni9OM28yMjlIMzYzNEZsMkdEUzJHMXRkZGh6TjN3b1plTUlDU2VCSmR4QmUxR0p4ZXcrV20rejJ1bGRpdExRUlAybm1IZXcvdmFQc3ZBQUFBLy84QkFBRC8vMGlaa0FRQUFBQUFBUUFBQUFFWVVhUWVvRE5mRHp6MUFBRUQ2QUFBQUFEWVhhRE1BQUFBQU4xbUx6Zit2ZjdkQ0IwRHlRQUNBQU1BQWdBQUFBQUFBQUFCQUFBRDJQN3ZBQUFJUVA2OS9id0lIUVBvQU1MLzBRQUFBQUFBQUFBQUFBQUFLQUowQUNRQXlBQUFBZjcveXdKSEFDTUNVQUFqQWZjQUl3SnVBQ01DYXdBakFpWUFJd0lyQUNNQi9nQmRBdlFBWHdJWkFDY0Jzd0FsQWhjQUp3SGhBQ1VCR2dBckFoTUFBUUlMQUI4QTdRQWZBZHdBSHdENEFDd0RId0FmQWcwQUh3SURBQ2NDRi8vMkFWWUFId0dTLy93QlJRQThBaEFBT0FIQUFEc0N3d0JHQWEzLzFBSEEvOElCNFAvMkFlQUFEd0VyQUNNQjRBQXdBTzBBSHdBQUFFY0FBQUF1QUM0QVVnQ0tBS3dBeEFEZUFRUUJLQUZRQVdRQm5nSFdBZ1FDUEFKMkFwNEM1Z01RQXh3RE5nTllBNW9EeEFQeUJDd0VTZ1NHQkxRRTRBVCtCVGdGWkFXVUJiNEY1Z1gwQmdnR0ZnWXNBQUFBQVFBQUFDZ0FqQUFNQUdZQUJ3QUJBQUFBQUFBQUFBQUFBQUFBQUFRQUEzaWNuSlRiVGh0WEZJWS9COXR0ZXJxb1VFUnUwTDVNcFdSTW94QWw0Y3FVb0l5S2NPcHhlcENxU29NOVBvanh6TWd6bUpJbjZIWGZvbStScXo1R242THFkYlYvTDRNZFJVRWdCUHg3OWpyOGE2MS9iV0NULzlpZ1ZyOEwvTjJjRzY2eDNmelo4QjIrYUI0WjNtQy8rWm5oT2c4Yi94aHVNR2k4TmR6a1FhTnIrQlBlMWY4MC9DbFA2cjhadnN0Vy9kRHc1enl1YnhyK2NzUHhyK0d2ZU1LN0JhN0JNLzR3WEdPTHd2QWROdm5WOEFiM3NKaTFPdmZZTWR6Z2E3WU5OOWtHZWt5b1NKbVFNY0l4Wk1LSU0yWWtsRVFrekpnd0pHR0FJNlJOU3FXdkdiR1FZL1RCcnpFUkZUTmlSUnhUNFVpSlNJa3BHVnZFdC9MS2VhMk1RNTFtZHRlbVlrek1pVHhPaWNsdzVJekl5VWc0Vlp5S2lvSVh0R2hSMGhmZmdvcVNnSklKS1FFNU0wYTA2SERJRVQzR1RDaHhIQ3FTWnhhUk02VGluRmo1blZuNHp2Ukp5Q2lOMVJrWkEvRjA0cGZJTytRSVI0ZEN0cXVSajlZaVBNVHhvN3c5dDF5MjN4TG8xNjB3VzgrN1pCTXpWejlUZFNYVnpia21PTmF0ejl2bUIrR0tGN2hiOVdlZHlmVTlHdWgvcGNnbm5HbitBMDBxRTVNTTU3Wm9FMGxCa2J1UFkxL25rRWdkK1ltUUhxL284SWFlem0yNmRHbHpUSStRbC9MdDBNWHhIUjJPT1pCSEtMeTRPNVJpanZrRngvZUVzdkd4RSt2UFltSUp2MU9ZdWt0eG5LbU9LWVY2N3BrSHFqVlJoVGVmc04raGZFMGRwWHo2MmlOdjZUUy9USHNXTXpKVkZHSTRWUytYMmlpdGZ3TlR4RlMxK05sZTNmdHRtTnZ1TGJmNGdsdzc3Tlc2NE9RbnQyQjAzVlNEOXpSenJwK0FtQUU1SjdMb2t6T2xSY1dGZUw4bTVvd1V4NEc2OTBwYlV0Rys5UEY1THFTU2hLa1loR1NLTTZQUTM5aDBFeG4zL3BydW5iMGxBL2w3cHFlWFZkMG1pMU92cm1iMFJ0MWIza1hXNVdSbEFpMmJhcjZpcHI2NFpxYjlSRHUxeWorU2I2blhMZWNSb2VJdWR2dERyOEFPejlsbGo3R3k5SFV6djd6enI0UzMyRk1IVGtsa05aU21mUTJQQ2RnbDRDbTc3UEtjcCsvMWNzbkdHUiszeG1jMWY1c0Q5dW13ZDIwMUM5c08rN3hjaS9ieHpIK0o3WTdxY1R5NlBEMjc5VFFmM0VDMTMyamZydDdOcmlibnB6RzNhRmZiY1V6TTFITnhXNnMxdWZzRS93TUFBUC8vQVFBQS8vOXlvVkZBQUFBQUF3QUEvL1VBQVAvT0FESUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQT09Iik7Cn1dXT48L3N0eWxlPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCFbQ0RBVEFbLnNoYXBlIHsKICBzaGFwZS1yZW5kZXJpbmc6IGdlb21ldHJpY1ByZWNpc2lvbjsKICBzdHJva2UtbGluZWpvaW46IHJvdW5kOwp9Ci5jb25uZWN0aW9uIHsKICBzdHJva2UtbGluZWNhcDogcm91bmQ7CiAgc3Ryb2tlLWxpbmVqb2luOiByb3VuZDsKfQouYmxlbmQgewogIG1peC1ibGVuZC1tb2RlOiBtdWx0aXBseTsKICBvcGFjaXR5OiAwLjU7Cn0KCgkJLmQyLTM5ODY3OTQ1NDEgLmZpbGwtTjF7ZmlsbDojMEEwRjI1O30KCQkuZDItMzk4Njc5NDU0MSAuZmlsbC1OMntmaWxsOiM2NzZDN0U7fQoJCS5kMi0zOTg2Nzk0NTQxIC5maWxsLU4ze2ZpbGw6Izk0OTlBQjt9CgkJLmQyLTM5ODY3OTQ1NDEgLmZpbGwtTjR7ZmlsbDojQ0ZEMkREO30KCQkuZDItMzk4Njc5NDU0MSAuZmlsbC1ONXtmaWxsOiNERUUxRUI7fQoJCS5kMi0zOTg2Nzk0NTQxIC5maWxsLU42e2ZpbGw6I0VFRjFGODt9CgkJLmQyLTM5ODY3OTQ1NDEgLmZpbGwtTjd7ZmlsbDojRkZGRkZGO30KCQkuZDItMzk4Njc5NDU0MSAuZmlsbC1CMXtmaWxsOiMwRDMyQjI7fQoJCS5kMi0zOTg2Nzk0NTQxIC5maWxsLUIye2ZpbGw6IzBEMzJCMjt9CgkJLmQyLTM5ODY3OTQ1NDEgLmZpbGwtQjN7ZmlsbDojRTNFOUZEO30KCQkuZDItMzk4Njc5NDU0MSAuZmlsbC1CNHtmaWxsOiNFM0U5RkQ7fQoJCS5kMi0zOTg2Nzk0NTQxIC5maWxsLUI1e2ZpbGw6I0VERjBGRDt9CgkJLmQyLTM5ODY3OTQ1NDEgLmZpbGwtQjZ7ZmlsbDojRjdGOEZFO30KCQkuZDItMzk4Njc5NDU0MSAuZmlsbC1BQTJ7ZmlsbDojNEE2RkYzO30KCQkuZDItMzk4Njc5NDU0MSAuZmlsbC1BQTR7ZmlsbDojRURGMEZEO30KCQkuZDItMzk4Njc5NDU0MSAuZmlsbC1BQTV7ZmlsbDojRjdGOEZFO30KCQkuZDItMzk4Njc5NDU0MSAuZmlsbC1BQjR7ZmlsbDojRURGMEZEO30KCQkuZDItMzk4Njc5NDU0MSAuZmlsbC1BQjV7ZmlsbDojRjdGOEZFO30KCQkuZDItMzk4Njc5NDU0MSAuc3Ryb2tlLU4xe3N0cm9rZTojMEEwRjI1O30KCQkuZDItMzk4Njc5NDU0MSAuc3Ryb2tlLU4ye3N0cm9rZTojNjc2QzdFO30KCQkuZDItMzk4Njc5NDU0MSAuc3Ryb2tlLU4ze3N0cm9rZTojOTQ5OUFCO30KCQkuZDItMzk4Njc5NDU0MSAuc3Ryb2tlLU40e3N0cm9rZTojQ0ZEMkREO30KCQkuZDItMzk4Njc5NDU0MSAuc3Ryb2tlLU41e3N0cm9rZTojREVFMUVCO30KCQkuZDItMzk4Njc5NDU0MSAuc3Ryb2tlLU42e3N0cm9rZTojRUVGMUY4O30KCQkuZDItMzk4Njc5NDU0MSAuc3Ryb2tlLU43e3N0cm9rZTojRkZGRkZGO30KCQkuZDItMzk4Njc5NDU0MSAuc3Ryb2tlLUIxe3N0cm9rZTojMEQzMkIyO30KCQkuZDItMzk4Njc5NDU0MSAuc3Ryb2tlLUIye3N0cm9rZTojMEQzMkIyO30KCQkuZDItMzk4Njc5NDU0MSAuc3Ryb2tlLUIze3N0cm9rZTojRTNFOUZEO30KCQkuZDItMzk4Njc5NDU0MSAuc3Ryb2tlLUI0e3N0cm9rZTojRTNFOUZEO30KCQkuZDItMzk4Njc5NDU0MSAuc3Ryb2tlLUI1e3N0cm9rZTojRURGMEZEO30KCQkuZDItMzk4Njc5NDU0MSAuc3Ryb2tlLUI2e3N0cm9rZTojRjdGOEZFO30KCQkuZDItMzk4Njc5NDU0MSAuc3Ryb2tlLUFBMntzdHJva2U6IzRBNkZGMzt9CgkJLmQyLTM5ODY3OTQ1NDEgLnN0cm9rZS1BQTR7c3Ryb2tlOiNFREYwRkQ7fQoJCS5kMi0zOTg2Nzk0NTQxIC5zdHJva2UtQUE1e3N0cm9rZTojRjdGOEZFO30KCQkuZDItMzk4Njc5NDU0MSAuc3Ryb2tlLUFCNHtzdHJva2U6I0VERjBGRDt9CgkJLmQyLTM5ODY3OTQ1NDEgLnN0cm9rZS1BQjV7c3Ryb2tlOiNGN0Y4RkU7fQoJCS5kMi0zOTg2Nzk0NTQxIC5iYWNrZ3JvdW5kLWNvbG9yLU4xe2JhY2tncm91bmQtY29sb3I6IzBBMEYyNTt9CgkJLmQyLTM5ODY3OTQ1NDEgLmJhY2tncm91bmQtY29sb3ItTjJ7YmFja2dyb3VuZC1jb2xvcjojNjc2QzdFO30KCQkuZDItMzk4Njc5NDU0MSAuYmFja2dyb3VuZC1jb2xvci1OM3tiYWNrZ3JvdW5kLWNvbG9yOiM5NDk5QUI7fQoJCS5kMi0zOTg2Nzk0NTQxIC5iYWNrZ3JvdW5kLWNvbG9yLU40e2JhY2tncm91bmQtY29sb3I6I0NGRDJERDt9CgkJLmQyLTM5ODY3OTQ1NDEgLmJhY2tncm91bmQtY29sb3ItTjV7YmFja2dyb3VuZC1jb2xvcjojREVFMUVCO30KCQkuZDItMzk4Njc5NDU0MSAuYmFja2dyb3VuZC1jb2xvci1ONntiYWNrZ3JvdW5kLWNvbG9yOiNFRUYxRjg7fQoJCS5kMi0zOTg2Nzk0NTQxIC5iYWNrZ3JvdW5kLWNvbG9yLU43e2JhY2tncm91bmQtY29sb3I6I0ZGRkZGRjt9CgkJLmQyLTM5ODY3OTQ1NDEgLmJhY2tncm91bmQtY29sb3ItQjF7YmFja2dyb3VuZC1jb2xvcjojMEQzMkIyO30KCQkuZDItMzk4Njc5NDU0MSAuYmFja2dyb3VuZC1jb2xvci1CMntiYWNrZ3JvdW5kLWNvbG9yOiMwRDMyQjI7fQoJCS5kMi0zOTg2Nzk0NTQxIC5iYWNrZ3JvdW5kLWNvbG9yLUIze2JhY2tncm91bmQtY29sb3I6I0UzRTlGRDt9CgkJLmQyLTM5ODY3OTQ1NDEgLmJhY2tncm91bmQtY29sb3ItQjR7YmFja2dyb3VuZC1jb2xvcjojRTNFOUZEO30KCQkuZDItMzk4Njc5NDU0MSAuYmFja2dyb3VuZC1jb2xvci1CNXtiYWNrZ3JvdW5kLWNvbG9yOiNFREYwRkQ7fQoJCS5kMi0zOTg2Nzk0NTQxIC5iYWNrZ3JvdW5kLWNvbG9yLUI2e2JhY2tncm91bmQtY29sb3I6I0Y3RjhGRTt9CgkJLmQyLTM5ODY3OTQ1NDEgLmJhY2tncm91bmQtY29sb3ItQUEye2JhY2tncm91bmQtY29sb3I6IzRBNkZGMzt9CgkJLmQyLTM5ODY3OTQ1NDEgLmJhY2tncm91bmQtY29sb3ItQUE0e2JhY2tncm91bmQtY29sb3I6I0VERjBGRDt9CgkJLmQyLTM5ODY3OTQ1NDEgLmJhY2tncm91bmQtY29sb3ItQUE1e2JhY2tncm91bmQtY29sb3I6I0Y3RjhGRTt9CgkJLmQyLTM5ODY3OTQ1NDEgLmJhY2tncm91bmQtY29sb3ItQUI0e2JhY2tncm91bmQtY29sb3I6I0VERjBGRDt9CgkJLmQyLTM5ODY3OTQ1NDEgLmJhY2tncm91bmQtY29sb3ItQUI1e2JhY2tncm91bmQtY29sb3I6I0Y3RjhGRTt9CgkJLmQyLTM5ODY3OTQ1NDEgLmNvbG9yLU4xe2NvbG9yOiMwQTBGMjU7fQoJCS5kMi0zOTg2Nzk0NTQxIC5jb2xvci1OMntjb2xvcjojNjc2QzdFO30KCQkuZDItMzk4Njc5NDU0MSAuY29sb3ItTjN7Y29sb3I6Izk0OTlBQjt9CgkJLmQyLTM5ODY3OTQ1NDEgLmNvbG9yLU40e2NvbG9yOiNDRkQyREQ7fQoJCS5kMi0zOTg2Nzk0NTQxIC5jb2xvci1ONXtjb2xvcjojREVFMUVCO30KCQkuZDItMzk4Njc5NDU0MSAuY29sb3ItTjZ7Y29sb3I6I0VFRjFGODt9CgkJLmQyLTM5ODY3OTQ1NDEgLmNvbG9yLU43e2NvbG9yOiNGRkZGRkY7fQoJCS5kMi0zOTg2Nzk0NTQxIC5jb2xvci1CMXtjb2xvcjojMEQzMkIyO30KCQkuZDItMzk4Njc5NDU0MSAuY29sb3ItQjJ7Y29sb3I6IzBEMzJCMjt9CgkJLmQyLTM5ODY3OTQ1NDEgLmNvbG9yLUIze2NvbG9yOiNFM0U5RkQ7fQoJCS5kMi0zOTg2Nzk0NTQxIC5jb2xvci1CNHtjb2xvcjojRTNFOUZEO30KCQkuZDItMzk4Njc5NDU0MSAuY29sb3ItQjV7Y29sb3I6I0VERjBGRDt9CgkJLmQyLTM5ODY3OTQ1NDEgLmNvbG9yLUI2e2NvbG9yOiNGN0Y4RkU7fQoJCS5kMi0zOTg2Nzk0NTQxIC5jb2xvci1BQTJ7Y29sb3I6IzRBNkZGMzt9CgkJLmQyLTM5ODY3OTQ1NDEgLmNvbG9yLUFBNHtjb2xvcjojRURGMEZEO30KCQkuZDItMzk4Njc5NDU0MSAuY29sb3ItQUE1e2NvbG9yOiNGN0Y4RkU7fQoJCS5kMi0zOTg2Nzk0NTQxIC5jb2xvci1BQjR7Y29sb3I6I0VERjBGRDt9CgkJLmQyLTM5ODY3OTQ1NDEgLmNvbG9yLUFCNXtjb2xvcjojRjdGOEZFO30uYXBwZW5kaXggdGV4dC50ZXh0e2ZpbGw6IzBBMEYyNX0ubWR7LS1jb2xvci1mZy1kZWZhdWx0OiMwQTBGMjU7LS1jb2xvci1mZy1tdXRlZDojNjc2QzdFOy0tY29sb3ItZmctc3VidGxlOiM5NDk5QUI7LS1jb2xvci1jYW52YXMtZGVmYXVsdDojRkZGRkZGOy0tY29sb3ItY2FudmFzLXN1YnRsZTojRUVGMUY4Oy0tY29sb3ItYm9yZGVyLWRlZmF1bHQ6IzBEMzJCMjstLWNvbG9yLWJvcmRlci1tdXRlZDojMEQzMkIyOy0tY29sb3ItbmV1dHJhbC1tdXRlZDojRUVGMUY4Oy0tY29sb3ItYWNjZW50LWZnOiMwRDMyQjI7LS1jb2xvci1hY2NlbnQtZW1waGFzaXM6IzBEMzJCMjstLWNvbG9yLWF0dGVudGlvbi1zdWJ0bGU6IzY3NkM3RTstLWNvbG9yLWRhbmdlci1mZzpyZWQ7fS5za2V0Y2gtb3ZlcmxheS1CMXtmaWxsOnVybCgjc3RyZWFrcy1kYXJrZXItZDItMzk4Njc5NDU0MSk7bWl4LWJsZW5kLW1vZGU6bGlnaHRlbn0uc2tldGNoLW92ZXJsYXktQjJ7ZmlsbDp1cmwoI3N0cmVha3MtZGFya2VyLWQyLTM5ODY3OTQ1NDEpO21peC1ibGVuZC1tb2RlOmxpZ2h0ZW59LnNrZXRjaC1vdmVybGF5LUIze2ZpbGw6dXJsKCNzdHJlYWtzLWJyaWdodC1kMi0zOTg2Nzk0NTQxKTttaXgtYmxlbmQtbW9kZTpkYXJrZW59LnNrZXRjaC1vdmVybGF5LUI0e2ZpbGw6dXJsKCNzdHJlYWtzLWJyaWdodC1kMi0zOTg2Nzk0NTQxKTttaXgtYmxlbmQtbW9kZTpkYXJrZW59LnNrZXRjaC1vdmVybGF5LUI1e2ZpbGw6dXJsKCNzdHJlYWtzLWJyaWdodC1kMi0zOTg2Nzk0NTQxKTttaXgtYmxlbmQtbW9kZTpkYXJrZW59LnNrZXRjaC1vdmVybGF5LUI2e2ZpbGw6dXJsKCNzdHJlYWtzLWJyaWdodC1kMi0zOTg2Nzk0NTQxKTttaXgtYmxlbmQtbW9kZTpkYXJrZW59LnNrZXRjaC1vdmVybGF5LUFBMntmaWxsOnVybCgjc3RyZWFrcy1kYXJrLWQyLTM5ODY3OTQ1NDEpO21peC1ibGVuZC1tb2RlOm92ZXJsYXl9LnNrZXRjaC1vdmVybGF5LUFBNHtmaWxsOnVybCgjc3RyZWFrcy1icmlnaHQtZDItMzk4Njc5NDU0MSk7bWl4LWJsZW5kLW1vZGU6ZGFya2VufS5za2V0Y2gtb3ZlcmxheS1BQTV7ZmlsbDp1cmwoI3N0cmVha3MtYnJpZ2h0LWQyLTM5ODY3OTQ1NDEpO21peC1ibGVuZC1tb2RlOmRhcmtlbn0uc2tldGNoLW92ZXJsYXktQUI0e2ZpbGw6dXJsKCNzdHJlYWtzLWJyaWdodC1kMi0zOTg2Nzk0NTQxKTttaXgtYmxlbmQtbW9kZTpkYXJrZW59LnNrZXRjaC1vdmVybGF5LUFCNXtmaWxsOnVybCgjc3RyZWFrcy1icmlnaHQtZDItMzk4Njc5NDU0MSk7bWl4LWJsZW5kLW1vZGU6ZGFya2VufS5za2V0Y2gtb3ZlcmxheS1OMXtmaWxsOnVybCgjc3RyZWFrcy1kYXJrZXItZDItMzk4Njc5NDU0MSk7bWl4LWJsZW5kLW1vZGU6bGlnaHRlbn0uc2tldGNoLW92ZXJsYXktTjJ7ZmlsbDp1cmwoI3N0cmVha3MtZGFyay1kMi0zOTg2Nzk0NTQxKTttaXgtYmxlbmQtbW9kZTpvdmVybGF5fS5za2V0Y2gtb3ZlcmxheS1OM3tmaWxsOnVybCgjc3RyZWFrcy1ub3JtYWwtZDItMzk4Njc5NDU0MSk7bWl4LWJsZW5kLW1vZGU6Y29sb3ItYnVybn0uc2tldGNoLW92ZXJsYXktTjR7ZmlsbDp1cmwoI3N0cmVha3Mtbm9ybWFsLWQyLTM5ODY3OTQ1NDEpO21peC1ibGVuZC1tb2RlOmNvbG9yLWJ1cm59LnNrZXRjaC1vdmVybGF5LU41e2ZpbGw6dXJsKCNzdHJlYWtzLWJyaWdodC1kMi0zOTg2Nzk0NTQxKTttaXgtYmxlbmQtbW9kZTpkYXJrZW59LnNrZXRjaC1vdmVybGF5LU42e2ZpbGw6dXJsKCNzdHJlYWtzLWJyaWdodC1kMi0zOTg2Nzk0NTQxKTttaXgtYmxlbmQtbW9kZTpkYXJrZW59LnNrZXRjaC1vdmVybGF5LU43e2ZpbGw6dXJsKCNzdHJlYWtzLWJyaWdodC1kMi0zOTg2Nzk0NTQxKTttaXgtYmxlbmQtbW9kZTpkYXJrZW59LmxpZ2h0LWNvZGV7ZGlzcGxheTogYmxvY2t9LmRhcmstY29kZXtkaXNwbGF5OiBub25lfV1dPjwvc3R5bGU+PGcgY2xhc3M9IlpHVjIiPjxnIGNsYXNzPSJzaGFwZSIgPjxyZWN0IHg9IjMzLjAwMDAwMCIgeT0iMC4wMDAwMDAiIHdpZHRoPSIxNTYuMDAwMDAwIiBoZWlnaHQ9IjY2LjAwMDAwMCIgc3Ryb2tlPSIjNDc1NTY5IiBmaWxsPSIjZjFmNWY5IiBzdHlsZT0ic3Ryb2tlLXdpZHRoOjI7IiAvPjwvZz48dGV4dCB4PSIxMTEuMDAwMDAwIiB5PSIzOC41MDAwMDAiIGZpbGw9IiMwQTBGMjUiIGNsYXNzPSJ0ZXh0LWJvbGQgZmlsbC1OMSIgc3R5bGU9InRleHQtYW5jaG9yOm1pZGRsZTtmb250LXNpemU6MTZweCI+RGV2ZWxvcGVyIE5lZWQ8L3RleHQ+PC9nPjxnIGNsYXNzPSJkR2xqYTJWMCI+PGcgY2xhc3M9InNoYXBlIiA+PHJlY3QgeD0iMzQuMDAwMDAwIiB5PSIxODcuMDAwMDAwIiB3aWR0aD0iMTU1LjAwMDAwMCIgaGVpZ2h0PSI2Ni4wMDAwMDAiIHN0cm9rZT0iIzQ3NTU2OSIgZmlsbD0iI2YxZjVmOSIgc3R5bGU9InN0cm9rZS13aWR0aDoyOyIgLz48L2c+PHRleHQgeD0iMTExLjUwMDAwMCIgeT0iMjI1LjUwMDAwMCIgZmlsbD0iIzBBMEYyNSIgY2xhc3M9InRleHQtYm9sZCBmaWxsLU4xIiBzdHlsZT0idGV4dC1hbmNob3I6bWlkZGxlO2ZvbnQtc2l6ZToxNnB4Ij5QbGF0Zm9ybSBUaWNrZXQ8L3RleHQ+PC9nPjxnIGNsYXNzPSJkSEpwWVdkbCI+PGcgY2xhc3M9InNoYXBlIiA+PHJlY3QgeD0iMC4wMDAwMDAiIHk9IjM3NC4wMDAwMDAiIHdpZHRoPSIyMjIuMDAwMDAwIiBoZWlnaHQ9IjY2LjAwMDAwMCIgc3Ryb2tlPSIjMWUyOTNiIiBmaWxsPSIjNjQ3NDhiIiBzdHlsZT0ic3Ryb2tlLXdpZHRoOjI7IiAvPjwvZz48dGV4dCB4PSIxMTEuMDAwMDAwIiB5PSI0MTIuNTAwMDAwIiBmaWxsPSIjZjFmNWY5IiBjbGFzcz0idGV4dC1ib2xkIiBzdHlsZT0idGV4dC1hbmNob3I6bWlkZGxlO2ZvbnQtc2l6ZToxNnB4Ij5QbGF0Zm9ybSBFbmdpbmVlciBUcmlhZ2U8L3RleHQ+PC9nPjxnIGNsYXNzPSJkM0pwZEdVPSI+PGcgY2xhc3M9InNoYXBlIiA+PHJlY3QgeD0iMzIuMDAwMDAwIiB5PSI1NjEuMDAwMDAwIiB3aWR0aD0iMTU5LjAwMDAwMCIgaGVpZ2h0PSI2Ni4wMDAwMDAiIHN0cm9rZT0iIzFlMjkzYiIgZmlsbD0iIzY0NzQ4YiIgc3R5bGU9InN0cm9rZS13aWR0aDoyOyIgLz48L2c+PHRleHQgeD0iMTExLjUwMDAwMCIgeT0iNTk5LjUwMDAwMCIgZmlsbD0iI2YxZjVmOSIgY2xhc3M9InRleHQtYm9sZCIgc3R5bGU9InRleHQtYW5jaG9yOm1pZGRsZTtmb250LXNpemU6MTZweCI+V3JpdGUgVGVycmFmb3JtPC90ZXh0PjwvZz48ZyBjbGFzcz0iY21WMmFXVjMiPjxnIGNsYXNzPSJzaGFwZSIgPjxyZWN0IHg9IjI0LjAwMDAwMCIgeT0iNzQ4LjAwMDAwMCIgd2lkdGg9IjE3NS4wMDAwMDAiIGhlaWdodD0iNjYuMDAwMDAwIiBzdHJva2U9IiMxZTI5M2IiIGZpbGw9IiM2NDc0OGIiIHN0eWxlPSJzdHJva2Utd2lkdGg6MjsiIC8+PC9nPjx0ZXh0IHg9IjExMS41MDAwMDAiIHk9Ijc4Ni41MDAwMDAiIGZpbGw9IiNmMWY1ZjkiIGNsYXNzPSJ0ZXh0LWJvbGQiIHN0eWxlPSJ0ZXh0LWFuY2hvcjptaWRkbGU7Zm9udC1zaXplOjE2cHgiPlBSIFJldmlldyArIEFwcGx5PC90ZXh0PjwvZz48ZyBjbGFzcz0iYUdGdVpBPT0iPjxnIGNsYXNzPSJzaGFwZSIgPjxyZWN0IHg9IjQuMDAwMDAwIiB5PSI5MzUuMDAwMDAwIiB3aWR0aD0iMjE0LjAwMDAwMCIgaGVpZ2h0PSI2Ni4wMDAwMDAiIHN0cm9rZT0iIzQ3NTU2OSIgZmlsbD0iI2YxZjVmOSIgc3R5bGU9InN0cm9rZS13aWR0aDoyOyIgLz48L2c+PHRleHQgeD0iMTExLjAwMDAwMCIgeT0iOTczLjUwMDAwMCIgZmlsbD0iIzBBMEYyNSIgY2xhc3M9InRleHQtYm9sZCBmaWxsLU4xIiBzdHlsZT0idGV4dC1hbmNob3I6bWlkZGxlO2ZvbnQtc2l6ZToxNnB4Ij5IYW5kIEJhY2sgdG8gRGV2ZWxvcGVyPC90ZXh0PjwvZz48ZyBjbGFzcz0iS0dSbGRpQXRKbWQwT3lCMGFXTnJaWFFwV3pCZCI+PG1hcmtlciBpZD0ibWstZDItMzk4Njc5NDU0MS0zNDg4Mzc4MTM0IiBtYXJrZXJXaWR0aD0iMTAuMDAwMDAwIiBtYXJrZXJIZWlnaHQ9IjEyLjAwMDAwMCIgcmVmWD0iNy4wMDAwMDAiIHJlZlk9IjYuMDAwMDAwIiB2aWV3Qm94PSIwLjAwMDAwMCAwLjAwMDAwMCAxMC4wMDAwMDAgMTIuMDAwMDAwIiBvcmllbnQ9ImF1dG8iIG1hcmtlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+IDxwb2x5Z29uIHBvaW50cz0iMC4wMDAwMDAsMC4wMDAwMDAgMTAuMDAwMDAwLDYuMDAwMDAwIDAuMDAwMDAwLDEyLjAwMDAwMCIgZmlsbD0iIzBEMzJCMiIgY2xhc3M9ImNvbm5lY3Rpb24gZmlsbC1CMSIgc3Ryb2tlLXdpZHRoPSIyIiAvPiA8L21hcmtlcj48cGF0aCBkPSJNIDExMS4wMDAwMDAgNjcuNTAwMDAwIEMgMTExLjAwMDAwMCAxMTQuMzAwMDAzIDExMS4wMDAwMDAgMTM4LjY5OTk5NyAxMTEuMDAwMDAwIDE4My41MDAwMDAiIHN0cm9rZT0iIzBEMzJCMiIgZmlsbD0ibm9uZSIgY2xhc3M9ImNvbm5lY3Rpb24gc3Ryb2tlLUIxIiBzdHlsZT0ic3Ryb2tlLXdpZHRoOjI7IiBtYXJrZXItZW5kPSJ1cmwoI21rLWQyLTM5ODY3OTQ1NDEtMzQ4ODM3ODEzNCkiIG1hc2s9InVybCgjZDItMzk4Njc5NDU0MSkiIC8+PHRleHQgeD0iMTExLjUwMDAwMCIgeT0iMTMyLjAwMDAwMCIgZmlsbD0iIzY3NkM3RSIgY2xhc3M9InRleHQtaXRhbGljIGZpbGwtTjIiIHN0eWxlPSJ0ZXh0LWFuY2hvcjptaWRkbGU7Zm9udC1zaXplOjE2cHgiPmZpbGVzPC90ZXh0PjwvZz48ZyBjbGFzcz0iS0hScFkydGxkQ0F0Sm1kME95QjBjbWxoWjJVcFd6QmQiPjxwYXRoIGQ9Ik0gMTExLjAwMDAwMCAyNTQuNTAwMDAwIEMgMTExLjAwMDAwMCAzMDEuMjk5OTg4IDExMS4wMDAwMDAgMzI1LjcwMDAxMiAxMTEuMDAwMDAwIDM3MC41MDAwMDAiIHN0cm9rZT0iIzBEMzJCMiIgZmlsbD0ibm9uZSIgY2xhc3M9ImNvbm5lY3Rpb24gc3Ryb2tlLUIxIiBzdHlsZT0ic3Ryb2tlLXdpZHRoOjI7IiBtYXJrZXItZW5kPSJ1cmwoI21rLWQyLTM5ODY3OTQ1NDEtMzQ4ODM3ODEzNCkiIG1hc2s9InVybCgjZDItMzk4Njc5NDU0MSkiIC8+PHRleHQgeD0iMTExLjUwMDAwMCIgeT0iMzE5LjAwMDAwMCIgZmlsbD0iIzY3NkM3RSIgY2xhc3M9InRleHQtaXRhbGljIGZpbGwtTjIiIHN0eWxlPSJ0ZXh0LWFuY2hvcjptaWRkbGU7Zm9udC1zaXplOjE2cHgiPjQtMjQgaG91cnM8L3RleHQ+PC9nPjxnIGNsYXNzPSJLSFJ5YVdGblpTQXRKbWQwT3lCM2NtbDBaU2xiTUYwPSI+PHBhdGggZD0iTSAxMTEuMDAwMDAwIDQ0MS41MDAwMDAgQyAxMTEuMDAwMDAwIDQ4OC4yOTk5ODggMTExLjAwMDAwMCA1MTIuNzAwMDEyIDExMS4wMDAwMDAgNTU3LjUwMDAwMCIgc3Ryb2tlPSIjMEQzMkIyIiBmaWxsPSJub25lIiBjbGFzcz0iY29ubmVjdGlvbiBzdHJva2UtQjEiIHN0eWxlPSJzdHJva2Utd2lkdGg6MjsiIG1hcmtlci1lbmQ9InVybCgjbWstZDItMzk4Njc5NDU0MS0zNDg4Mzc4MTM0KSIgbWFzaz0idXJsKCNkMi0zOTg2Nzk0NTQxKSIgLz48dGV4dCB4PSIxMTEuMDAwMDAwIiB5PSI1MDYuMDAwMDAwIiBmaWxsPSIjNjc2QzdFIiBjbGFzcz0idGV4dC1pdGFsaWMgZmlsbC1OMiIgc3R5bGU9InRleHQtYW5jaG9yOm1pZGRsZTtmb250LXNpemU6MTZweCI+Y29udGV4dCBzd2l0Y2g8L3RleHQ+PC9nPjxnIGNsYXNzPSJLSGR5YVhSbElDMG1aM1E3SUhKbGRtbGxkeWxiTUYwPSI+PHBhdGggZD0iTSAxMTEuMDAwMDAwIDYyOC41MDAwMDAgQyAxMTEuMDAwMDAwIDY3NS4yOTk5ODggMTExLjAwMDAwMCA2OTkuNzAwMDEyIDExMS4wMDAwMDAgNzQ0LjUwMDAwMCIgc3Ryb2tlPSIjMEQzMkIyIiBmaWxsPSJub25lIiBjbGFzcz0iY29ubmVjdGlvbiBzdHJva2UtQjEiIHN0eWxlPSJzdHJva2Utd2lkdGg6MjsiIG1hcmtlci1lbmQ9InVybCgjbWstZDItMzk4Njc5NDU0MS0zNDg4Mzc4MTM0KSIgbWFzaz0idXJsKCNkMi0zOTg2Nzk0NTQxKSIgLz48dGV4dCB4PSIxMTEuMDAwMDAwIiB5PSI2OTMuMDAwMDAwIiBmaWxsPSIjNjc2QzdFIiBjbGFzcz0idGV4dC1pdGFsaWMgZmlsbC1OMiIgc3R5bGU9InRleHQtYW5jaG9yOm1pZGRsZTtmb250LXNpemU6MTZweCI+c2FtZSBvciBuZXh0IGRheTwvdGV4dD48L2c+PGcgY2xhc3M9IktISmxkbWxsZHlBdEptZDBPeUJvWVc1a0tWc3dYUT09Ij48cGF0aCBkPSJNIDExMS4wMDAwMDAgODE1LjUwMDAwMCBDIDExMS4wMDAwMDAgODYyLjI5OTk4OCAxMTEuMDAwMDAwIDg4Ni43MDAwMTIgMTExLjAwMDAwMCA5MzEuNTAwMDAwIiBzdHJva2U9IiMwRDMyQjIiIGZpbGw9Im5vbmUiIGNsYXNzPSJjb25uZWN0aW9uIHN0cm9rZS1CMSIgc3R5bGU9InN0cm9rZS13aWR0aDoyOyIgbWFya2VyLWVuZD0idXJsKCNtay1kMi0zOTg2Nzk0NTQxLTM0ODgzNzgxMzQpIiBtYXNrPSJ1cmwoI2QyLTM5ODY3OTQ1NDEpIiAvPjx0ZXh0IHg9IjExMS4wMDAwMDAiIHk9Ijg4MC4wMDAwMDAiIGZpbGw9IiM2NzZDN0UiIGNsYXNzPSJ0ZXh0LWl0YWxpYyBmaWxsLU4yIiBzdHlsZT0idGV4dC1hbmNob3I6bWlkZGxlO2ZvbnQtc2l6ZToxNnB4Ij5kb25lPC90ZXh0PjwvZz48bWFzayBpZD0iZDItMzk4Njc5NDU0MSIgbWFza1VuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeD0iLTEwMSIgeT0iLTEwMSIgd2lkdGg9IjQyNCIgaGVpZ2h0PSIxMjAzIj4KPHJlY3QgeD0iLTEwMSIgeT0iLTEwMSIgd2lkdGg9IjQyNCIgaGVpZ2h0PSIxMjAzIiBmaWxsPSJ3aGl0ZSI+PC9yZWN0Pgo8cmVjdCB4PSI5Ni4wMDAwMDAiIHk9IjExNi4wMDAwMDAiIHdpZHRoPSIzMSIgaGVpZ2h0PSIyMSIgZmlsbD0iYmxhY2siPjwvcmVjdD4KPHJlY3QgeD0iNzUuMDAwMDAwIiB5PSIzMDMuMDAwMDAwIiB3aWR0aD0iNzMiIGhlaWdodD0iMjEiIGZpbGw9ImJsYWNrIj48L3JlY3Q+CjxyZWN0IHg9IjYyLjAwMDAwMCIgeT0iNDkwLjAwMDAwMCIgd2lkdGg9Ijk4IiBoZWlnaHQ9IjIxIiBmaWxsPSJibGFjayI+PC9yZWN0Pgo8cmVjdCB4PSI1Mi4wMDAwMDAiIHk9IjY3Ny4wMDAwMDAiIHdpZHRoPSIxMTgiIGhlaWdodD0iMjEiIGZpbGw9ImJsYWNrIj48L3JlY3Q+CjxyZWN0IHg9IjkyLjAwMDAwMCIgeT0iODY0LjAwMDAwMCIgd2lkdGg9IjM4IiBoZWlnaHQ9IjIxIiBmaWxsPSJibGFjayI+PC9yZWN0Pgo8L21hc2s+PC9zdmc+PC9zdmc+Cg==" alt="Architecture diagram" /></div>
<p>Every step in that flow is a handoff. Handoffs create delay. Platform engineers lose half a day to context-switching. Developers lose a day or two waiting. The same resources get provisioned slightly differently each time because Terraform is written fresh from memory rather than from a tested module.</p>
<p>The resource types in those tickets are not random. When we clustered six months of tickets by resource type, eight categories accounted for 80% of total volume: EKS services, RDS instances, S3 buckets, SQS queues, Lambda functions, VPC subnets, IAM roles, and ECR repositories. That clustering is what drove the eight-module number. It is not an arbitrary figure. Most platform teams find that six to ten resource types cover the bulk of their load.</p>
<h2>The 8 Modules and What Each One Enforces</h2>
<p>Each module exposes a minimal interface to developers: the things they legitimately need to choose, like service name and instance size. Each module hard-codes the things developers routinely skip: encryption, tagging, network placement, deletion protection.</p>
<p>The pattern matters. Modules fail adoption when they are opinionated about things developers care about, like forcing a specific instance type, while staying silent on things developers forget, like enabling encryption at rest. We inverted that: flexible on sizing, strict on compliance.</p>
<table>
<thead><tr><th style="text-align:left">Module</th><th style="text-align:left">Resource</th><th style="text-align:left">Developer Inputs</th><th style="text-align:left">Enforced Defaults</th></tr></thead>
<tbody>
<tr><td style="text-align:left"><code>eks-service</code></td><td style="text-align:left">EKS Deployment + Service</td><td style="text-align:left">name, image, replicas, cpu/memory limits</td><td style="text-align:left">resource limits required, liveness probe required, namespace, labels schema</td></tr>
<tr><td style="text-align:left"><code>rds-instance</code></td><td style="text-align:left">RDS (Postgres/MySQL)</td><td style="text-align:left">engine, instance class, db name</td><td style="text-align:left">encryption at rest, deletion protection on, automated backups 7 days, private subnet only</td></tr>
<tr><td style="text-align:left"><code>s3-bucket</code></td><td style="text-align:left">S3 + Bucket Policy + IAM</td><td style="text-align:left">bucket name, allowed principals</td><td style="text-align:left">versioning on, public access blocked, server-side encryption AES-256, lifecycle rule 90 days</td></tr>
<tr><td style="text-align:left"><code>sqs-queue</code></td><td style="text-align:left">SQS Standard or FIFO</td><td style="text-align:left">queue name, visibility timeout</td><td style="text-align:left">server-side encryption, dead letter queue wired, max receive count 3</td></tr>
<tr><td style="text-align:left"><code>lambda-function</code></td><td style="text-align:left">Lambda + IAM Role + Log Group</td><td style="text-align:left">function name, runtime, handler, memory</td><td style="text-align:left">least-privilege execution role, CloudWatch log group with 30-day retention, X-Ray tracing on</td></tr>
<tr><td style="text-align:left"><code>vpc-subnet</code></td><td style="text-align:left">Subnet + Route Table</td><td style="text-align:left">CIDR, availability zone, subnet type</td><td style="text-align:left">private by default, no public IP auto-assign, VPC flow logs enabled</td></tr>
<tr><td style="text-align:left"><code>iam-role</code></td><td style="text-align:left">IAM Role + Policy</td><td style="text-align:left">role name, trusted principal, policy statements</td><td style="text-align:left">no wildcard resources allowed (validation), path <code>/service/</code>, permission boundary attached</td></tr>
<tr><td style="text-align:left"><code>ecr-repo</code></td><td style="text-align:left">ECR Repository</td><td style="text-align:left">repo name</td><td style="text-align:left">image scanning on push, tag immutability on, <a href="https://zop.dev/resources/blogs/shadow-cloud-spend-forgotten-dev-accounts">lifecycle policy</a> 30 untagged images</td></tr>
</tbody>
</table>
<p>The tagging enforcement deserves specific mention. Every module writes a <code>local</code> block that constructs a standard tag map from required inputs: <code>environment</code>, <code>team</code>, <code>cost-center</code>, and <code>managed-by = terraform</code>. Resources come out of the module tagged correctly by default. Our internal governance audit showed this eliminated 90% of untagged resource drift. The manual alternative: a compliance scan finds untagged resources, creates a ticket, an engineer tracks down the owner, the owner tags the resource. That loop took three to five days <a href="https://zop.dev/resources/blogs/live-kubernetes-visibility-21-resource-pages-crashloop-overview">per resource</a>. The module collapses it to zero.</p>
<h2>How the Registry Makes It Truly Self-Service</h2>
<p>Modules alone are not enough. If developers still need to ask a platform engineer to run <code>terraform apply</code>, the ticket volume drops but does not disappear. The platform team becomes the apply button instead of the Terraform author. That is a smaller problem, but it is still a bottleneck.</p>
<p>The registry layer removes the human from the apply step. We use Atlantis, which runs as a pod in the cluster and watches pull requests in the infrastructure repository. The self-service flow looks like this:</p>
<div class="d2-diagram"><img src="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIGRhdGEtZDItdmVyc2lvbj0iMC43LjEiIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaW5ZTWluIG1lZXQiIHZpZXdCb3g9IjAgMCA0NjkgMTIwMyI+PHN2ZyBjbGFzcz0iZDItMzUyNTI1NzA0IGQyLXN2ZyIgd2lkdGg9IjQ2OSIgaGVpZ2h0PSIxMjAzIiB2aWV3Qm94PSItMTAxIC0xMDEgNDY5IDEyMDMiPjxyZWN0IHg9Ii0xMDEuMDAwMDAwIiB5PSItMTAxLjAwMDAwMCIgd2lkdGg9IjQ2OS4wMDAwMDAiIGhlaWdodD0iMTIwMy4wMDAwMDAiIHJ4PSIwLjAwMDAwMCIgZmlsbD0iI0ZGRkZGRiIgY2xhc3M9IiBmaWxsLU43IiBzdHJva2Utd2lkdGg9IjAiIC8+PHN0eWxlIHR5cGU9InRleHQvY3NzIj48IVtDREFUQVsKLmQyLTM1MjUyNTcwNCAudGV4dC1ib2xkIHsKCWZvbnQtZmFtaWx5OiAiZDItMzUyNTI1NzA0LWZvbnQtYm9sZCI7Cn0KQGZvbnQtZmFjZSB7Cglmb250LWZhbWlseTogZDItMzUyNTI1NzA0LWZvbnQtYm9sZDsKCXNyYzogdXJsKCJkYXRhOmFwcGxpY2F0aW9uL2ZvbnQtd29mZjtiYXNlNjQsZDA5R1JnQUJBQUFBQUE0UUFBb0FBQUFBRllnQUFndUZBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJQVXk4eUFBQUE5QUFBQUdBQUFBQmdYeEhYcm1OdFlYQUFBQUZVQUFBQXFBQUFBTndEMUFUcVoyeDVaZ0FBQWZ3QUFBZDlBQUFLQ0tjLzRzaG9aV0ZrQUFBSmZBQUFBRFlBQUFBMkczOGUxR2hvWldFQUFBbTBBQUFBSkFBQUFDUUtmd1hoYUcxMGVBQUFDZGdBQUFDSUFBQUFpRVV0QlpKc2IyTmhBQUFLWUFBQUFFWUFBQUJHTGlJcm5tMWhlSEFBQUFxb0FBQUFJQUFBQUNBQU9nRDNibUZ0WlFBQUNzZ0FBQU1vQUFBSUtnandWa0Z3YjNOMEFBQU44QUFBQUIwQUFBQWcvOUVBTWdBREFpb0N2QUFGQUFBQ2lnSllBQUFBU3dLS0FsZ0FBQUZlQURJQktRQUFBZ3NIQXdNRUF3SUNCR0FBQXZjQUFBQURBQUFBQUFBQUFBQkJSRUpQQUNBQUlQLy9BdTcvQmdBQUE5Z0JFU0FBQVo4QUFBQUFBZkFDbEFBQUFDQUFBM2ljZk0wN0xnVUJBSVhoYjl6eHZ0N3Y5L1FhbGpDaG5JUlFxRVVrSkFyUmlQVWdRaXNoT25aZ0N4YWcweDh4VWQvVG5PWkxmaFE2Q25TVlBsR3BsTzF2MmxiYjFkaDM2TWl4VStjdVhidEovc1dXMm83R25vTlduRGh6NGVwUDVDcy8rYzVIM3ZPVzE3emtPVTk1ekVQdWM1ZmJ0dGw3aFExcjF2WHBLUFViTUdqSXNCR2p1c2FNbXpCcHlyUVpzK2JNVzdCb3liSVZxL3dDQUFELy93RUFBUC8vOTI0cXBuaWNqRlpiYkJQcEZUNy83OHNram5NWmorMnhIZDhuTStNNDJJazltWmxjY1VJY0p4RGJJUWtrb2VSQ0l3cFpBZ0dCYWJMYnBieEF0MldOVUVtMmhXN1ZTcWlvN1lwS29IM0pya1FyOVdHMzFTS3RWSGE3VmFWVnR4ZnhzRWlWVlZsVnRYWEcxWGdNSk51WGZmRDhmcG52Zk44NTMvbm1Cd01jQk1CTGVCTjBVQXVOWUFFYmdFQUdTRmJnZVlhUUJWbG1hSjNNSTVJNGlDM0szWi94cmZyV1ZuM1lmOHYzeXVJaXlpemd6ZTNUUnpOTFMvOWU3TzFWZnZMT3U4cDFkT0ZkQUZ6K0FnQVA0VHpVQWdsQUVRTFBjVHhqTk9vb2dXSjRobmpTOUhwamZYTzkzdXo4NHRHRFJ6OE92UjlDQi9yNllxdEM1eG5sS3M1djU5NThFd0FBUWJSY3hCMzRGalFER0lJY0ozWktraEMzMHdUSE1VR2owV2ExQzNGSnBvMW9mdkxhMU9Icms0bmpnYXhUWnZic2I1c2VEU1VjMlVseitvMHpwMjlQQ01FRjJoTmYySGY4WEl0ejdoaGd5QURnTk02RFNWTXN4TzEybTlWb1pIZ2hMa2xpSjhjeFRHYnIrTTJKZ3plT1JkeGRVOUhvVkpjYjU1TTN6cDI3T2JJV21zdG1qN0FWZmhrQTlEZWNCME1GaFF6WU1oc0k0L3gyNFZXVlA2N3cvemErQlkxZlVsQ3B4c2ZWVWt4UTFZR21aNitPalYyZDFaNUQyZXpRVURacm5yeDlhdVdOOGZFZm5EcDFlL0p5Ym1scGRYVnBLUWRWL2gwNEQyYXc3dUxQMkVnaHJvSXltYzlHTDZaU3VlR0owZldCdmlUTzgzUGo2YVgyVDlIa3NoRFd1S2tZVXpnUERVRHZ3Q0RVQWFrb2tnYnpkUGg4TWlGdTNyMDBrZTdwNys5SjR6dzdteDJkcDVYL1BuMktqc1U2T2ppMUQweTVpRTM0Rm9RcktublpidGNBZUQ2S2R3L05aclhUdE1ZV1dRY3V4dzh4MDZGb1JHZzdIT2pqZWw5S2RwMExqL2tIZUM3U0hUN1VtK3BaTlhkRXYrSGxnaDZmeDlMUzBKNXFsMlk3OTRUbm5jMCt0OWRMQmgySGhxVzVMa0RRQUtEejR6d0VBQVNkUU5udHRDQkpNclhqbjQ3UmFSNGtkSys5L01PSXNjR29OMUdtMUtXVWlUTHBpWG9pY2ozM3prQk52VUZ2cksvcHgzbmxRK0ZrWitkSkFjV1VEMlBMb25neWptTGJPUlRpTWkwdEdVNzVFMkFJbDR2b0kxUUNKekFBZEZBZHJWeVJTUEFWd1RhU1VldkpjVWtXSzE3OWRmTGdsUTNNdFBvR1dzVDJsWjdGRStzbXZXK2t4c2xTMlQ2ZmVTYVJuVzBNOEE3YjF6MHRxK2VWZndodTVqeE56WmphUEE2NjRyV1djaEU5UkNWd2ZYa1h0SzVxbTJCRXp1R3pnNlBmVEVaSDNNT01YMHdrT2h4UnFvZWROdmRmbkp6SzlYdnBSVTk2Y0NCamF6em1iOVo4d0plTHFJUWZBZ1grWnpvcXdMd283RkR3YkhqL21qdmJ1OWpaMnVVMGJxeWI5SzRVZHZBV3FzM0tTTzNtMTErZXVMalg3VWovY25zbzVtTFdyYzRQTEExREkvdUhBVmU0L3hXVndBRysvOXNESXFDNlJlV3VFeXJyZ0h3ajUvY05uZTRkbVcvWFkrVVRVeW9tU2pGdTRVZHY4M3VDa25sdmJuSWlsMGlzSkNtMlZoSUNSMXhlMU5NcXRtdDVNYWdLd2crclcyRWpuZzJDckFBVDVPQUc0UjZMVCt6ZjhQamRJUWQrZU8rSXMyMWxYbm1FQWxMSVNTc1BvRndHR1FBK3hZOHhwL1lEQ0FqQU5RMjdYRVFXL0JBYXRTNlJBdm04NmI5TDkyNlF0UWJDYURHejVxTmptTm4raExZZ2RNWkFhSngwSGxTcWVKTVVWRHVxM2QzRmpIaCtEcXFlU01YRVFTcHdJSFp3Yk1Qalp6dlVSenNxRFBnaWJhRmc3Qm5kRHVWQjlYaW1HNVdxdXFzMWR1cGVOK245bWVmQ1VTSGhqZXpTcmMwSUU2ajBGYkxLbmppYlRKNU5KRmFUeWRWRUpCcU5SQ09ScXIvNmMxT1RGL3ZYTWdPRGFkVm1LdTVnZVJUYlVRa284QUxRTDlpcGVSWGtlTnBHcWRoTWtMRFo3U3BQejM3K2E4dDlpNUsvejJVWTU2VHB0ckExdElWL0VYTXgzN3R3ZUQzUjdCei9QbXBKcGI4VCtjRFNVSjA1dW9GS1lOblZYeTF0Tk9YTmFjN21Oam5xblUzdWZpc3F6TVJqQnNObHZiNDFybndHQ0d6bEl2b3BLZ0ZmbWV1TDdPSzA3SG9PcGlhWEY5dXN4c2V4azl5K1lNSVg4SHFpTG05djZLWEQzVE8rZmE1T1YzYzM1Kzl2WFRaenZqbG5NMDJSZHNwa2J1bHVIWjdtSGJOV08rOXdOdFF4M2RHaGVjMnJaTG1JVm5GT1RWOURrQk5GUnBSbHdTYlltQjNMREhQanlUVDV5dG9hNHpFN1RUUWxtMDlOLy82TThjcVZDKytIV2FOK3hXaldzUHJLUmZRZlZGRG52OHViWkhXRi96aXhmOFByZDNQMmpmVTZuZStBZVdVZWRTcC9FVnRkSGpTcU5BMnpld0NCR1FDVlVRSHFLeGxLVjVOVEZuUnYvM3h6UUUzSldzbzBlUDBPS256T1puZyt3MzZ1TkZWcU93QndBUldxMmZ2aXZSMElUUFg3VHhDYnI5N3NNSnFNZXFLK1ZyN2NWZHRJNklsYW92MjdhL2NpUkQyaEorcUlQYWp3aEIzbHVBUE1rOG81eWo1Um10NWpVcUZRaW5tdlVzOWMzb3UyVVVGMTZZdDV5Zkl1eWcxNDNSNW9kQkdXR2paa0luNnpPVkpuTWVscnlOcSs2L2ZvcnZIZkd2WG5rS0hGNDBKLy96aVlZcGtSNW1PbGJ1L2g2bmVSTFJmUlUvd2ExRlgzUVBPQXphcnVnSFkzMEs0ZWRsUno0dEtsRStyUEdhTHBrTk1SY2poQzVyZnUzTGw3OTg2ZHQ4NnpDek16YzhIZzNNek1BcXZ5VGdHZ1ArTnZxWDBXMUdnVkpVbFdReXAxYmExek5IaDZiUTJkUFdweVc3ZExhOXBNZzdDQS9va2xxQU9RUlVZVVJNMGNmN2gvLy9UOSt3dGJ5MXRieTF0Vi84TkhxQUE2N1E0eXVJRUtTaE9nOHE5d04wemh4K3I3NUE0VmJEVEtzdEVvN2c0elRGajl3ZjhBQUFELy93RUFBUC8vdWk4ZUZnQUFBQUFCQUFBQUFndUZUTHRhWDE4UFBQVUFBUVBvQUFBQUFOaGRvSVFBQUFBQTNXWXZOdjQzL3NRSWJRUHhBQUVBQXdBQ0FBQUFBQUFBQUFFQUFBUFkvdThBQUFpWS9qZitOd2h0QUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFpQXJJQVVBRElBQUFDUGYvNkFrWUFMZ0o3QUUwQ0JnQk5BcXdBTGdKVUFFMENaUUJOQWl3QUl3TXRBQTRDRHdBcUFkTUFKQUk5QUNjQ0JnQWtBanNBUVFFVUFEY0JIZ0JCQTFrQVFRSThBRUVDS3dBa0FqMEFRUUdPQUVFQnV3QVZBWDhBRVFJNEFEd0NDd0FNQXdnQUdBSUpBQXdDRUFBbEFoQUFSZ0lRQUNJQkZBQkJBQUQvclFBQUFDd0FMQUJRQUh3QW9BQ3dBTndBL2dFa0FXUUJuZ0hXQWdJQ05BSm9Bb29DbGdLeUF1UURCZ015QTJJRGdnTytBK1FFQmdRaUJGb0VpZ1MyQk00RTRnVHVCUVFBQUFBQkFBQUFJZ0NRQUF3QVl3QUhBQUVBQUFBQUFBQUFBQUFBQUFBQUJBQURlSnljbE05dUcxVVV4bjlPYk5NS3dRSkZWYnFKN29KRmtlallWRW5WTml1SDFJcEZGQWVQQzBKQ1NCUFArSTh5bmhsNUpnN2hDVmp6RnJ4RlZ6d0V6NEZZby9sODdOZ0YwU2FLa254Mzd2bnpuWE8rYzRFZC9tYWJTdlVoOEVjOU1WeGhyMzV1ZUlzSDlSUEQyN1RyVzRhclBLbjlhYmhHV0pzYnJ2TjVyV2Y0STk1V2Z6UDhnUDNxVDRZZnNsdHRHLzZZWjlVZHc1OXNPLzR5L0NuN3ZGM2dDcnpnVjhNVmRza01iN0hEajRhM2VZVEZyRlI1Uk5Od2pjL1lNMXhuRCtnem9TQm1Rc0lJeDVBSkk2NllFWkhqRXpGandwQ0lFRWVIRmpHRnZpWUVRbzdSZjM0TjhDbVlFU2ppbUFKSGpFOU1RTTdZSXY0aXI1UnpaUnpxTkxPN0ZnVmpBaTdrY1VsQWdpTmxSRXBDeEtYaUZCUmt2S0pCZzV5QitHWVU1SGprVElqeFNKa3hva0dYTnFmMEdUTWh4OUZXcEpLWlQ4cVFnbXNDNVhkbVVYWm1RRVJDYnF5dVNBakYwNGxmSk84T3B6aTZaTEpkajN5NkVlRkxITi9KdStTV3l2WXJQUDI2TldhYmVaZHNBdWJxWjZ5dXhMcTUxZ1RIdWkzenR2aFd1T0FWN2w3OTJXVHkvaDZGK2w4bzhnVlhtbitvU1NWaWt1RGNMaTE4S2NoM2ozRWM2ZHpCVjBlK3AwT2ZFN3E4b2E5eml4NDlXcHpScDhOcitYYnA0ZmlhTG1jY3k2TWp2TGhyU3pGbi9JRGpHenF5S1dOSDFwL0Z4Q0orSmpOMTUrSTRVeDFUTXZXOFpPNnAxa2dWM24zQzVRNmxHK3JJNVRQUUhwV1dUdk5MdEdjQkkxTkZKb1pUOVhLcGpkejZGNW9pcHFxbG5PM3RmYmtOYzl1OTVSYmZrR3FIUzdVdU9KV1RXekI2MzFTOWR6UnpyUitQZ0pDVUMxa01TSm5Tb09CR3ZNOEp1Q0xHY2F6dW5XaExDbG9ybnpMUGpWUVNNUldERG9uaXpNajBOekRkK01aOXNLRjdaMjlKS1ArUzZlV3FxdnRrY2VyVjdZemVxSHZMTzkrNkhLMU5vR0ZUVGRmVU5CRFh4TFFmYWFmVytmdnl6Zlc2cFR6bGlKU1k4Rjh2d0RNOG11eHp3Q0ZqWlJqb1ptNnZRMU12UkpPWEhLcjZTeUpaRGFYbnlDSWM0UEdjQXc1NHlmTjMrcmhrNG95TFczRlp6OTNpbUNPNkhINVFGUXY3TGtlOFhuMzcvNnkvaTJsVHRUaWVyazR2N2ozRkozZFE2eGZhczl2M3NxZUpsWk9ZVzdUYnJUZ2pZRnB5Y2J2ck5ibkhlUDhBQUFELy93RUFBUC8vOUxkUFVYaWNZbUJtQUlQLzV4aU1HTEFBQUFBQUFQLy9BUUFBLy84dkFRSURBQUFBIik7Cn0KLmQyLTM1MjUyNTcwNCAudGV4dC1pdGFsaWMgewoJZm9udC1mYW1pbHk6ICJkMi0zNTI1MjU3MDQtZm9udC1pdGFsaWMiOwp9CkBmb250LWZhY2UgewoJZm9udC1mYW1pbHk6IGQyLTM1MjUyNTcwNC1mb250LWl0YWxpYzsKCXNyYzogdXJsKCJkYXRhOmFwcGxpY2F0aW9uL2ZvbnQtd29mZjtiYXNlNjQsZDA5R1JnQUJBQUFBQUE1MEFBb0FBQUFBRm1nQUFSaFJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJQVXk4eUFBQUE5QUFBQUdBQUFBQmdXMVNWZUdOdFlYQUFBQUZVQUFBQXFBQUFBTndEMUFUcVoyeDVaZ0FBQWZ3QUFBZmpBQUFLNE04UW9qZG9aV0ZrQUFBSjRBQUFBRFlBQUFBMkc3VXIybWhvWldFQUFBb1lBQUFBSkFBQUFDUUxlQWpHYUcxMGVBQUFDandBQUFDSUFBQUFpRDlCQkdSc2IyTmhBQUFLeEFBQUFFWUFBQUJHTWJBdTdHMWhlSEFBQUFzTUFBQUFJQUFBQUNBQU9nRDJibUZ0WlFBQUN5d0FBQU1tQUFBSU1nbnRWek53YjNOMEFBQU9WQUFBQUNBQUFBQWcvOFlBTWdBREFlRUJrQUFGQUFBQ2lnSlkvL0VBU3dLS0FsZ0FSQUZlQURJQkl3QUFBZ3NGQXdNRUF3a0NCQ0FBQUhjQUFBQURBQUFBQUFBQUFBQkJSRUpQQUFFQUlQLy9BdTcvQmdBQUE5Z0JFU0FBQVpNQUFBQUFBZVlDbEFBQUFDQUFBM2ljZk0wN0xnVUJBSVhoYjl6eHZ0N3Y5L1FhbGpDaG5JUlFxRVVrSkFyUmlQVWdRaXNoT25aZ0N4YWcweDh4VWQvVG5PWkxmaFE2Q25TVlBsR3BsTzF2MmxiYjFkaDM2TWl4VStjdVhidEovc1dXMm83R25vTlduRGh6NGVwUDVDcy8rYzVIM3ZPVzE3emtPVTk1ekVQdWM1ZmJ0dGw3aFExcjF2WHBLUFViTUdqSXNCR2p1c2FNbXpCcHlyUVpzK2JNVzdCb3liSVZxL3dDQUFELy93RUFBUC8vOTI0cXBuaWNmRlo5YkJQbi9mOCt6MTN1U09LODJHZWZzVW5pMkhlK1M0emZjbWZmeFhIc3ZOaXhuZGdtSkdrQ1B5QnZoUlFDL0dnb0RZVUJnMUtwWTkzV21Ra05iVUpxcDIzU3BrcnJCUDJuLzJ4U21VVFVqVW1UdW9scFdxV1ZMVlF3cVZzVVZWMjFuS2V6OCtKRTAvNTU5Q2lLdjkvUDUvUDlmRC9QUVJYd0FQZ012Z1VFVkVNRG1NQUNJRE5PZ3BCVmxiTVNzaWh5TksyS0RFUHoxOUhTOWUrVGlVTi9hM3Y3WDE0SG1YNzFwOW0vejd5RGI2MmRSdGNtcjE3VkR0K1ltenZ3N0pubVFYOTRCZ0NBaTc4R1FML0hCYWdHSXdCRHk2SWdpQnhGSVNRem5NalJqN3Z1MTVBMUpHbVh0ZCtnWTRkeUk2WlA1OUhGaFlYUXljN0ljVzBFRjlZV0hqNEVRQkFwcm1JZnZnTU9nQ3FYSUlSRGNTeExySlVXQk01Vmp5MW1scFVsUmJWU0ZISmxUeWpCUTFkeW5TTzdGVVlSdXFiN2VkZFF0QzNSeXZHVGhzU0ZmZmxicjZSVlQzdXJHRHQyb1RzNkdXN2RJemw4T2xiZ0FMQlN3c3JvQ3NnU2F6RlRGQ2ZLa3FLRVF3TEhjYTk5NWV2ZkduL3J4WW1KOGN1SjQwY1ZYUGpheFZmZW0rdDk3cnV6ay9NNlg2VFhRTi9CQmFncVZTQ2NOUGZhdnZQSVhJY0xhM2Y3QVVOM2NSVlA0VHZRQ0swbEp1dEVXSXU1SG90U0hPdDl5b1NRNDh5aWYySXhOVFFYOGsrOG5BZ2ZpTHVHOXVubm9PSDI1V3hoY1NCNWFTeDdjM0VnMGYzOFltUjJNZnI4WXRmTStVMGVQbHlBV2pCWDh1QUlScFkyaUx4LzVLV2hWNStiRC9WTno1M01aZVp3WVdoaS8vRU83UXVVM2o4Y2tXR3pqb2dMVUFmc1ZoMmE0WWh0bGQ0N2N2Yk0yTG14MHkrcHlhTlR4N0taR1Z4SWpSMCtZOVFlSTFaN2lzWkhVMHFnckkyaHVJbzBmQWM4QUZhWElLcWxtWVZEZ2lqcUExV1V6WUZTbE1YTVdxMXNDZmVUeEVKYnBIbGM3Ujd4dVhPZWFQaElORHJqa0cwcHZ6dmMzTUhuQXFIb0M0YXVycjE3cFdRbkw3RisrNkFxalVxaE5uOUx1eU80Undpd3ZxYTAyblU0QkFpbUFRZ3ZMb0N6UEJ1S29tVkZVUm1aWWMyVzhnMXhSRWhST1lxaWllbnEvVFVFUVpMV0lQdWpkRFVpelh2TmIrYTFsYU0wUm1TOTAzZ1BGN1Rib2RQaDhPa1FtdGR1aDA0cHlxa1FtbDliUURmNVlWSE1pZHFMSlEzRjRpcjZBcTJBV1ZmVHVqbHZxNnpLQktkM0VpVkZWVGRkZks4MzV4MmFrc1dZa1dUaXN6MjdTTzZnU1JqbXZSYXBpVStFSFIyR3crT3BpMGZrTm1kTXMyZmNnVjUvNEkrQ3l6TTRLZlhFeWhxN2k2dm9MbHFCcG0zZHRsUmQzNUpIdzhlOCtkbXd0NXYxTVVKemNFS0pkTFVxck11ZU43d3dtVHczSG5EWmdsWkxjaUhSbjdJYkpiTWJOcmhnRVMrQlJVK01iVnorTjVrdUU5RW81QXZyYlBhNWQ3SVJXNmQvc2RhNWt3NHVjZmtsV2dFN3VDdjdsVnpvcERZM25wQkw2Nmt6L092RXZDOTdKS2oydFJpcXRGOVZ0eVk4elJGclMvUEk5NHFZTUxWejRTbkR5ZG1CaFZHdmY3L1VKTmYzN0hmYmpMTEZnZHkxdSt1YU9oempnUFI4UVkvd0V0aEtIcUYxaDVSOFR4TWNvN2ZoWEJSTk9ON01CeHZKOWxGdlBMd3JudXNteVV4VHhqK0FsNTdGdUVCZnA0UFhQa1JlOCs2NnJNZXYvYVJZMUd2Q2wvZ3VGdlNkQndxY21mS3N2TVZWK0JJdmdVbG5GdzZwSlU5YXpPdTAvcitQdXBTL2dwQ1JvR2hVd3hwNmpEWjhhdTBtWFUyWUVJNlNaTG1HQXdBL1JTdjZUdWw0eTNDdDY2Q3BiYWdyQ2N6MjBLUXdKblIxVkFVT3VtTUtTY2J6TVpKTVd6TGVBWjFQaXMzc0hVRExnM3lIMnVhVit6cU5MZVpLVGx1M0RRem9FVnFCM1pVWWRrcW1kMndmOVc5VHJOUmhwMkNiWGtOL1FpdlFBTTJWc3kvSFpEbU95NGIrYUhqS096UWxEVTk3czFNZTM0aXNTUHBoT0hGNDROeTR2M3oyOWk4ays5T0poV1IvcXZRbWZWNlUwVC9RU3RuSGRBWGllc3k1QlAyMVl6YVNtS0pwbHExNW80Y2kzT1Ara3AwbG9adkJKc2VQK1VTNEpkanVHdUg4WnZraHZ0ZnI4SzJiMlhIaUxZUThnNU55UE9ZUlBuVTdOK2VFTHFNVmFLelF5RW9MRzlyVWtzMDVuODJ5cDlITzV4d3h0RHpwalZVbmQvVkV0WWVBaXY4dXJxSXJhQVhFbmJtNU16YjExQ3lINWc4N0ptMUJhNi9naWJWMytpUGVRYTkvcU1uUHlFNmhRMm1OaDRLamhsQ2I0R2p6YzNiUllZKzM3KzF6OHkxdFpydlAwU0tZWE4xZVg5S3RZKzR1cnFLRCtQUm1saWdxdy9WZ21aWnBqcWpJa3ZkN1F5U0twR3R6Zk4rZVM0WXJFYUxKVlcrdk5UWUdERDIrQm5zZE1rV3FYbjg5cmowMW1WcGFhcXBVdWtHdjNWbGNSWitoWlgzUE5tcHZ1WjlaajVOM05wMlphVTU3QjNKNklMWTlaK2hYalE0R0tkcEhqRTIzRERxbzJZYzR1YXh6RkFEOUJTMURIWUJNeUF6TFd0ZVQvWG82eDVNVVNScDU1dHQ1YlEwdGEwKzRMTWNQOHNpbTJjdS9UUUhnQjJpNTlENVUvbmJyUm5CRStmdUZKdWE1WENOQ2lHelkwM2d0YThUNnEyQnZ2SnI1ODNSOTZhL05EZWZSc3ZhSksrbHlKVjJvcGVKbVJ6VmNodWN6blBZNW9PSUh4UUI2akpiQkRrQ1hacXZ6VjdjaHI4ZFVUV3U5eldSeTk5bE1Zem1oYWhkQkd0Mm1iK2EwVDJ6UnpPOW9PbElka3pqMFJQdk1tZWU0bkFzWjEvNFp5SHZMZStRcHJxTGY0amZBcUxPeWJuMDUvWmNQamlVcDdmWU16b1NsRk44K09OMGhKa0xOWG4vcE5IUWVqZi9mRHk2bnU0N0dENzE5S1JWTG5yMlJUQndZT0hzajJYOEFrSTRkWGNOZmhWb0FXWlVaVGxWVW1aQnBlOTAzWnM3V2pLdlJsNjhiZXRISGtzRzE5a0d2cm5NUWpxTVBzVWYvZnpYTWhlV3diSkV0bk9Yam43M2IvZTdQanorSTNMOGZlYkMrTS9BUUxRTlJmcThkcy9ubjBYSnBXQWpTT0F0MzhWMjlCbFB5VHpud0xqQXRuTlhjek9Hc2xiVTVkN08yMXY4QUFBRC8vd0VBQVAvL2sreERJZ0FBQVFBQUFBRVlVUVVPTXlWZkR6ejFBQUVENkFBQUFBRFlYYURNQUFBQUFOMW1MemYrdmY3ZENCMER5UUFDQUFNQUFnQUFBQUFBQUFBQkFBQUQyUDd2QUFBSVFQNjkvYndJSFFQb0FNTC8wUUFBQUFBQUFBQUFBQUFBSWdKMEFDUUF5QUFBQWY3L3l3SW1BRGtDVUFBakFjNEFJd0o1QUR3Q0pnQWpBaXNBSXdINkFBd0M5QUJmQWhrQUp3R3pBQ1VDRndBbkFlRUFKUUlMQUI4QTdRQWZBUGdBTEFNZkFCOENEUUFmQWdNQUp3SVgvL1lCVmdBZkFaTC8vQUZGQUR3Q0VBQTRBY0FBT3dMREFFWUJ3UC9DQWVBQUtnSGdBQm9CNEFBd0FPMEFId0FBQUVjQUFBQXVBQzRBVWdDRUFLWUF0Z0RvQVF3Qk5BRjBBYTRCNWdJVUFrd0NoZ0t3QXJ3QzNnTWdBMG9EZUFPeUE5QUVEQVE2QkdZRWhBUytCTzRGSUFVNEJVd0ZXZ1Z3QUFBQUFRQUFBQ0lBakFBTUFHWUFCd0FCQUFBQUFBQUFBQUFBQUFBQUFBUUFBM2ljbkpUYlRodFhGSVkvQjl0dGVycW9VRVJ1MEw1TXBXUk1veEFsNGNxVW9JeUtjT3B4ZXBDcVNvTTlQb2p4ek1nem1KSW42SFhmb20rUnF6NUduNkxxZGJWL0w0TWRSVUVnQlB4NzlqcjhhNjEvYldDVC85aWdWcjhML04yY0c2NngzZnpaOEIyK2FCNFozbUMvK1puaE9nOGIveGh1TUdpOE5kemtRYU5yK0JQZTFmODAvQ2xQNnI4WnZzdFcvZER3NXp5dWJ4citjc1B4citHdmVNSzdCYTdCTS80d1hHT0x3dkFkTnZuVjhBYjNzSmkxT3ZmWU1kemdhN1lOTjlrR2VreW9TSm1RTWNJeFpNS0lNMllrbEVRa3pKZ3dKR0dBSTZSTlNxV3ZHYkdRWS9UQnJ6RVJGVE5pUlJ4VDRVaUpTSWtwR1Z2RXQvTEtlYTJNUTUxbWR0ZW1Za3pNaVR4T2ljbHc1SXpJeVVnNFZaeUtpb0lYdEdoUjBoZmZnb3FTZ0pJSktRRTVNMGEwNkhESUVUM0dUQ2h4SENxU1p4YVJNNlRpbkZqNW5WbjR6dlJKeUNpTjFSa1pBL0YwNHBmSU8rUUlSNGRDdHF1Umo5WWlQTVR4bzd3OXQxeTIzeExvMTYwd1c4KzdaQk16Vno5VGRTWFZ6YmttT05hdHo5dm1CK0dLRjdoYjlXZWR5ZlU5R3VoL3BjZ25uR24rQTAwcUU1TU01N1pvRTBsQmtidVBZMS9ua0VnZCtZbVFIcS9vOElhZXptMjZkR2x6VEkrUWwvTHQwTVh4SFIyT09aQkhLTHk0TzVSaWp2a0Z4L2VFc3ZHeEUrdlBZbUlKdjFPWXVrdHhuS21PS1lWNjdwa0hxalZSaFRlZnNOK2hmRTBkcFh6NjJpTnY2VFMvVEhzV016SlZGR0k0VlMrWDJpaXRmd05UeEZTMStObGUzZnR0bU52dUxiZjRnbHc3N05XNjRPUW50MkIwM1ZTRDl6UnpycCtBbUFFNUo3TG9rek9sUmNXRmVMOG01b3dVeDRHNjkwcGJVdEcrOVBGNUxxU1NoS2tZaEdTS002UFEzOWgwRXhuMy9wcnVuYjBsQS9sN3BxZVhWZDBtaTFPdnJtYjBSdDFiM2tYVzVXUmxBaTJiYXI2aXByNjRacWI5UkR1MXlqK1NiNm5YTGVjUm9lSXVkdnREcjhBT3o5bGxqN0d5OUhVenY3enpyNFMzMkZNSFRrbGtOWlNtZlEyUENkZ2w0Q203N1BLY3ArLzFjc25HR1IrM3htYzFmNXNEOXVtd2QyMDFDOXNPKzd4Y2kvYnh6SCtKN1k3cWNUeTZQRDI3OVRRZjNFQzEzMmpmcnQ3TnJpYm5wekczYUZmYmNVek0xSE54VzZzMXVmc0Uvd01BQVAvL0FRQUEvLzl5b1ZGQUFBQUFBd0FBLy9VQUFQL09BRElBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUE9PSIpOwp9XV0+PC9zdHlsZT48c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhW0NEQVRBWy5zaGFwZSB7CiAgc2hhcGUtcmVuZGVyaW5nOiBnZW9tZXRyaWNQcmVjaXNpb247CiAgc3Ryb2tlLWxpbmVqb2luOiByb3VuZDsKfQouY29ubmVjdGlvbiB7CiAgc3Ryb2tlLWxpbmVjYXA6IHJvdW5kOwogIHN0cm9rZS1saW5lam9pbjogcm91bmQ7Cn0KLmJsZW5kIHsKICBtaXgtYmxlbmQtbW9kZTogbXVsdGlwbHk7CiAgb3BhY2l0eTogMC41Owp9CgoJCS5kMi0zNTI1MjU3MDQgLmZpbGwtTjF7ZmlsbDojMEEwRjI1O30KCQkuZDItMzUyNTI1NzA0IC5maWxsLU4ye2ZpbGw6IzY3NkM3RTt9CgkJLmQyLTM1MjUyNTcwNCAuZmlsbC1OM3tmaWxsOiM5NDk5QUI7fQoJCS5kMi0zNTI1MjU3MDQgLmZpbGwtTjR7ZmlsbDojQ0ZEMkREO30KCQkuZDItMzUyNTI1NzA0IC5maWxsLU41e2ZpbGw6I0RFRTFFQjt9CgkJLmQyLTM1MjUyNTcwNCAuZmlsbC1ONntmaWxsOiNFRUYxRjg7fQoJCS5kMi0zNTI1MjU3MDQgLmZpbGwtTjd7ZmlsbDojRkZGRkZGO30KCQkuZDItMzUyNTI1NzA0IC5maWxsLUIxe2ZpbGw6IzBEMzJCMjt9CgkJLmQyLTM1MjUyNTcwNCAuZmlsbC1CMntmaWxsOiMwRDMyQjI7fQoJCS5kMi0zNTI1MjU3MDQgLmZpbGwtQjN7ZmlsbDojRTNFOUZEO30KCQkuZDItMzUyNTI1NzA0IC5maWxsLUI0e2ZpbGw6I0UzRTlGRDt9CgkJLmQyLTM1MjUyNTcwNCAuZmlsbC1CNXtmaWxsOiNFREYwRkQ7fQoJCS5kMi0zNTI1MjU3MDQgLmZpbGwtQjZ7ZmlsbDojRjdGOEZFO30KCQkuZDItMzUyNTI1NzA0IC5maWxsLUFBMntmaWxsOiM0QTZGRjM7fQoJCS5kMi0zNTI1MjU3MDQgLmZpbGwtQUE0e2ZpbGw6I0VERjBGRDt9CgkJLmQyLTM1MjUyNTcwNCAuZmlsbC1BQTV7ZmlsbDojRjdGOEZFO30KCQkuZDItMzUyNTI1NzA0IC5maWxsLUFCNHtmaWxsOiNFREYwRkQ7fQoJCS5kMi0zNTI1MjU3MDQgLmZpbGwtQUI1e2ZpbGw6I0Y3RjhGRTt9CgkJLmQyLTM1MjUyNTcwNCAuc3Ryb2tlLU4xe3N0cm9rZTojMEEwRjI1O30KCQkuZDItMzUyNTI1NzA0IC5zdHJva2UtTjJ7c3Ryb2tlOiM2NzZDN0U7fQoJCS5kMi0zNTI1MjU3MDQgLnN0cm9rZS1OM3tzdHJva2U6Izk0OTlBQjt9CgkJLmQyLTM1MjUyNTcwNCAuc3Ryb2tlLU40e3N0cm9rZTojQ0ZEMkREO30KCQkuZDItMzUyNTI1NzA0IC5zdHJva2UtTjV7c3Ryb2tlOiNERUUxRUI7fQoJCS5kMi0zNTI1MjU3MDQgLnN0cm9rZS1ONntzdHJva2U6I0VFRjFGODt9CgkJLmQyLTM1MjUyNTcwNCAuc3Ryb2tlLU43e3N0cm9rZTojRkZGRkZGO30KCQkuZDItMzUyNTI1NzA0IC5zdHJva2UtQjF7c3Ryb2tlOiMwRDMyQjI7fQoJCS5kMi0zNTI1MjU3MDQgLnN0cm9rZS1CMntzdHJva2U6IzBEMzJCMjt9CgkJLmQyLTM1MjUyNTcwNCAuc3Ryb2tlLUIze3N0cm9rZTojRTNFOUZEO30KCQkuZDItMzUyNTI1NzA0IC5zdHJva2UtQjR7c3Ryb2tlOiNFM0U5RkQ7fQoJCS5kMi0zNTI1MjU3MDQgLnN0cm9rZS1CNXtzdHJva2U6I0VERjBGRDt9CgkJLmQyLTM1MjUyNTcwNCAuc3Ryb2tlLUI2e3N0cm9rZTojRjdGOEZFO30KCQkuZDItMzUyNTI1NzA0IC5zdHJva2UtQUEye3N0cm9rZTojNEE2RkYzO30KCQkuZDItMzUyNTI1NzA0IC5zdHJva2UtQUE0e3N0cm9rZTojRURGMEZEO30KCQkuZDItMzUyNTI1NzA0IC5zdHJva2UtQUE1e3N0cm9rZTojRjdGOEZFO30KCQkuZDItMzUyNTI1NzA0IC5zdHJva2UtQUI0e3N0cm9rZTojRURGMEZEO30KCQkuZDItMzUyNTI1NzA0IC5zdHJva2UtQUI1e3N0cm9rZTojRjdGOEZFO30KCQkuZDItMzUyNTI1NzA0IC5iYWNrZ3JvdW5kLWNvbG9yLU4xe2JhY2tncm91bmQtY29sb3I6IzBBMEYyNTt9CgkJLmQyLTM1MjUyNTcwNCAuYmFja2dyb3VuZC1jb2xvci1OMntiYWNrZ3JvdW5kLWNvbG9yOiM2NzZDN0U7fQoJCS5kMi0zNTI1MjU3MDQgLmJhY2tncm91bmQtY29sb3ItTjN7YmFja2dyb3VuZC1jb2xvcjojOTQ5OUFCO30KCQkuZDItMzUyNTI1NzA0IC5iYWNrZ3JvdW5kLWNvbG9yLU40e2JhY2tncm91bmQtY29sb3I6I0NGRDJERDt9CgkJLmQyLTM1MjUyNTcwNCAuYmFja2dyb3VuZC1jb2xvci1ONXtiYWNrZ3JvdW5kLWNvbG9yOiNERUUxRUI7fQoJCS5kMi0zNTI1MjU3MDQgLmJhY2tncm91bmQtY29sb3ItTjZ7YmFja2dyb3VuZC1jb2xvcjojRUVGMUY4O30KCQkuZDItMzUyNTI1NzA0IC5iYWNrZ3JvdW5kLWNvbG9yLU43e2JhY2tncm91bmQtY29sb3I6I0ZGRkZGRjt9CgkJLmQyLTM1MjUyNTcwNCAuYmFja2dyb3VuZC1jb2xvci1CMXtiYWNrZ3JvdW5kLWNvbG9yOiMwRDMyQjI7fQoJCS5kMi0zNTI1MjU3MDQgLmJhY2tncm91bmQtY29sb3ItQjJ7YmFja2dyb3VuZC1jb2xvcjojMEQzMkIyO30KCQkuZDItMzUyNTI1NzA0IC5iYWNrZ3JvdW5kLWNvbG9yLUIze2JhY2tncm91bmQtY29sb3I6I0UzRTlGRDt9CgkJLmQyLTM1MjUyNTcwNCAuYmFja2dyb3VuZC1jb2xvci1CNHtiYWNrZ3JvdW5kLWNvbG9yOiNFM0U5RkQ7fQoJCS5kMi0zNTI1MjU3MDQgLmJhY2tncm91bmQtY29sb3ItQjV7YmFja2dyb3VuZC1jb2xvcjojRURGMEZEO30KCQkuZDItMzUyNTI1NzA0IC5iYWNrZ3JvdW5kLWNvbG9yLUI2e2JhY2tncm91bmQtY29sb3I6I0Y3RjhGRTt9CgkJLmQyLTM1MjUyNTcwNCAuYmFja2dyb3VuZC1jb2xvci1BQTJ7YmFja2dyb3VuZC1jb2xvcjojNEE2RkYzO30KCQkuZDItMzUyNTI1NzA0IC5iYWNrZ3JvdW5kLWNvbG9yLUFBNHtiYWNrZ3JvdW5kLWNvbG9yOiNFREYwRkQ7fQoJCS5kMi0zNTI1MjU3MDQgLmJhY2tncm91bmQtY29sb3ItQUE1e2JhY2tncm91bmQtY29sb3I6I0Y3RjhGRTt9CgkJLmQyLTM1MjUyNTcwNCAuYmFja2dyb3VuZC1jb2xvci1BQjR7YmFja2dyb3VuZC1jb2xvcjojRURGMEZEO30KCQkuZDItMzUyNTI1NzA0IC5iYWNrZ3JvdW5kLWNvbG9yLUFCNXtiYWNrZ3JvdW5kLWNvbG9yOiNGN0Y4RkU7fQoJCS5kMi0zNTI1MjU3MDQgLmNvbG9yLU4xe2NvbG9yOiMwQTBGMjU7fQoJCS5kMi0zNTI1MjU3MDQgLmNvbG9yLU4ye2NvbG9yOiM2NzZDN0U7fQoJCS5kMi0zNTI1MjU3MDQgLmNvbG9yLU4ze2NvbG9yOiM5NDk5QUI7fQoJCS5kMi0zNTI1MjU3MDQgLmNvbG9yLU40e2NvbG9yOiNDRkQyREQ7fQoJCS5kMi0zNTI1MjU3MDQgLmNvbG9yLU41e2NvbG9yOiNERUUxRUI7fQoJCS5kMi0zNTI1MjU3MDQgLmNvbG9yLU42e2NvbG9yOiNFRUYxRjg7fQoJCS5kMi0zNTI1MjU3MDQgLmNvbG9yLU43e2NvbG9yOiNGRkZGRkY7fQoJCS5kMi0zNTI1MjU3MDQgLmNvbG9yLUIxe2NvbG9yOiMwRDMyQjI7fQoJCS5kMi0zNTI1MjU3MDQgLmNvbG9yLUIye2NvbG9yOiMwRDMyQjI7fQoJCS5kMi0zNTI1MjU3MDQgLmNvbG9yLUIze2NvbG9yOiNFM0U5RkQ7fQoJCS5kMi0zNTI1MjU3MDQgLmNvbG9yLUI0e2NvbG9yOiNFM0U5RkQ7fQoJCS5kMi0zNTI1MjU3MDQgLmNvbG9yLUI1e2NvbG9yOiNFREYwRkQ7fQoJCS5kMi0zNTI1MjU3MDQgLmNvbG9yLUI2e2NvbG9yOiNGN0Y4RkU7fQoJCS5kMi0zNTI1MjU3MDQgLmNvbG9yLUFBMntjb2xvcjojNEE2RkYzO30KCQkuZDItMzUyNTI1NzA0IC5jb2xvci1BQTR7Y29sb3I6I0VERjBGRDt9CgkJLmQyLTM1MjUyNTcwNCAuY29sb3ItQUE1e2NvbG9yOiNGN0Y4RkU7fQoJCS5kMi0zNTI1MjU3MDQgLmNvbG9yLUFCNHtjb2xvcjojRURGMEZEO30KCQkuZDItMzUyNTI1NzA0IC5jb2xvci1BQjV7Y29sb3I6I0Y3RjhGRTt9LmFwcGVuZGl4IHRleHQudGV4dHtmaWxsOiMwQTBGMjV9Lm1key0tY29sb3ItZmctZGVmYXVsdDojMEEwRjI1Oy0tY29sb3ItZmctbXV0ZWQ6IzY3NkM3RTstLWNvbG9yLWZnLXN1YnRsZTojOTQ5OUFCOy0tY29sb3ItY2FudmFzLWRlZmF1bHQ6I0ZGRkZGRjstLWNvbG9yLWNhbnZhcy1zdWJ0bGU6I0VFRjFGODstLWNvbG9yLWJvcmRlci1kZWZhdWx0OiMwRDMyQjI7LS1jb2xvci1ib3JkZXItbXV0ZWQ6IzBEMzJCMjstLWNvbG9yLW5ldXRyYWwtbXV0ZWQ6I0VFRjFGODstLWNvbG9yLWFjY2VudC1mZzojMEQzMkIyOy0tY29sb3ItYWNjZW50LWVtcGhhc2lzOiMwRDMyQjI7LS1jb2xvci1hdHRlbnRpb24tc3VidGxlOiM2NzZDN0U7LS1jb2xvci1kYW5nZXItZmc6cmVkO30uc2tldGNoLW92ZXJsYXktQjF7ZmlsbDp1cmwoI3N0cmVha3MtZGFya2VyLWQyLTM1MjUyNTcwNCk7bWl4LWJsZW5kLW1vZGU6bGlnaHRlbn0uc2tldGNoLW92ZXJsYXktQjJ7ZmlsbDp1cmwoI3N0cmVha3MtZGFya2VyLWQyLTM1MjUyNTcwNCk7bWl4LWJsZW5kLW1vZGU6bGlnaHRlbn0uc2tldGNoLW92ZXJsYXktQjN7ZmlsbDp1cmwoI3N0cmVha3MtYnJpZ2h0LWQyLTM1MjUyNTcwNCk7bWl4LWJsZW5kLW1vZGU6ZGFya2VufS5za2V0Y2gtb3ZlcmxheS1CNHtmaWxsOnVybCgjc3RyZWFrcy1icmlnaHQtZDItMzUyNTI1NzA0KTttaXgtYmxlbmQtbW9kZTpkYXJrZW59LnNrZXRjaC1vdmVybGF5LUI1e2ZpbGw6dXJsKCNzdHJlYWtzLWJyaWdodC1kMi0zNTI1MjU3MDQpO21peC1ibGVuZC1tb2RlOmRhcmtlbn0uc2tldGNoLW92ZXJsYXktQjZ7ZmlsbDp1cmwoI3N0cmVha3MtYnJpZ2h0LWQyLTM1MjUyNTcwNCk7bWl4LWJsZW5kLW1vZGU6ZGFya2VufS5za2V0Y2gtb3ZlcmxheS1BQTJ7ZmlsbDp1cmwoI3N0cmVha3MtZGFyay1kMi0zNTI1MjU3MDQpO21peC1ibGVuZC1tb2RlOm92ZXJsYXl9LnNrZXRjaC1vdmVybGF5LUFBNHtmaWxsOnVybCgjc3RyZWFrcy1icmlnaHQtZDItMzUyNTI1NzA0KTttaXgtYmxlbmQtbW9kZTpkYXJrZW59LnNrZXRjaC1vdmVybGF5LUFBNXtmaWxsOnVybCgjc3RyZWFrcy1icmlnaHQtZDItMzUyNTI1NzA0KTttaXgtYmxlbmQtbW9kZTpkYXJrZW59LnNrZXRjaC1vdmVybGF5LUFCNHtmaWxsOnVybCgjc3RyZWFrcy1icmlnaHQtZDItMzUyNTI1NzA0KTttaXgtYmxlbmQtbW9kZTpkYXJrZW59LnNrZXRjaC1vdmVybGF5LUFCNXtmaWxsOnVybCgjc3RyZWFrcy1icmlnaHQtZDItMzUyNTI1NzA0KTttaXgtYmxlbmQtbW9kZTpkYXJrZW59LnNrZXRjaC1vdmVybGF5LU4xe2ZpbGw6dXJsKCNzdHJlYWtzLWRhcmtlci1kMi0zNTI1MjU3MDQpO21peC1ibGVuZC1tb2RlOmxpZ2h0ZW59LnNrZXRjaC1vdmVybGF5LU4ye2ZpbGw6dXJsKCNzdHJlYWtzLWRhcmstZDItMzUyNTI1NzA0KTttaXgtYmxlbmQtbW9kZTpvdmVybGF5fS5za2V0Y2gtb3ZlcmxheS1OM3tmaWxsOnVybCgjc3RyZWFrcy1ub3JtYWwtZDItMzUyNTI1NzA0KTttaXgtYmxlbmQtbW9kZTpjb2xvci1idXJufS5za2V0Y2gtb3ZlcmxheS1ONHtmaWxsOnVybCgjc3RyZWFrcy1ub3JtYWwtZDItMzUyNTI1NzA0KTttaXgtYmxlbmQtbW9kZTpjb2xvci1idXJufS5za2V0Y2gtb3ZlcmxheS1ONXtmaWxsOnVybCgjc3RyZWFrcy1icmlnaHQtZDItMzUyNTI1NzA0KTttaXgtYmxlbmQtbW9kZTpkYXJrZW59LnNrZXRjaC1vdmVybGF5LU42e2ZpbGw6dXJsKCNzdHJlYWtzLWJyaWdodC1kMi0zNTI1MjU3MDQpO21peC1ibGVuZC1tb2RlOmRhcmtlbn0uc2tldGNoLW92ZXJsYXktTjd7ZmlsbDp1cmwoI3N0cmVha3MtYnJpZ2h0LWQyLTM1MjUyNTcwNCk7bWl4LWJsZW5kLW1vZGU6ZGFya2VufS5saWdodC1jb2Rle2Rpc3BsYXk6IGJsb2NrfS5kYXJrLWNvZGV7ZGlzcGxheTogbm9uZX1dXT48L3N0eWxlPjxnIGNsYXNzPSJjSEk9Ij48ZyBjbGFzcz0ic2hhcGUiID48cmVjdCB4PSI0MC4wMDAwMDAiIHk9IjAuMDAwMDAwIiB3aWR0aD0iMTg3LjAwMDAwMCIgaGVpZ2h0PSI2Ni4wMDAwMDAiIHN0cm9rZT0iIzQ3NTU2OSIgZmlsbD0iI2YxZjVmOSIgc3R5bGU9InN0cm9rZS13aWR0aDoyOyIgLz48L2c+PHRleHQgeD0iMTMzLjUwMDAwMCIgeT0iMzguNTAwMDAwIiBmaWxsPSIjMEEwRjI1IiBjbGFzcz0idGV4dC1ib2xkIGZpbGwtTjEiIHN0eWxlPSJ0ZXh0LWFuY2hvcjptaWRkbGU7Zm9udC1zaXplOjE2cHgiPkRldmVsb3BlciBPcGVucyBQUjwvdGV4dD48L2c+PGcgY2xhc3M9ImNHeGhiZz09Ij48ZyBjbGFzcz0ic2hhcGUiID48cmVjdCB4PSI4LjAwMDAwMCIgeT0iMTg3LjAwMDAwMCIgd2lkdGg9IjI1MS4wMDAwMDAiIGhlaWdodD0iNjYuMDAwMDAwIiBzdHJva2U9IiMxZTI5M2IiIGZpbGw9IiM2NDc0OGIiIHN0eWxlPSJzdHJva2Utd2lkdGg6MjsiIC8+PC9nPjx0ZXh0IHg9IjEzMy41MDAwMDAiIHk9IjIyNS41MDAwMDAiIGZpbGw9IiNmMWY1ZjkiIGNsYXNzPSJ0ZXh0LWJvbGQiIHN0eWxlPSJ0ZXh0LWFuY2hvcjptaWRkbGU7Zm9udC1zaXplOjE2cHgiPkF0bGFudGlzIFBvc3RzIFBsYW4gQ29tbWVudDwvdGV4dD48L2c+PGcgY2xhc3M9ImNtVjJhV1YzIj48ZyBjbGFzcz0ic2hhcGUiID48cmVjdCB4PSIwLjAwMDAwMCIgeT0iMzc0LjAwMDAwMCIgd2lkdGg9IjI2Ny4wMDAwMDAiIGhlaWdodD0iNjYuMDAwMDAwIiBzdHJva2U9IiM0NzU1NjkiIGZpbGw9IiNmMWY1ZjkiIHN0eWxlPSJzdHJva2Utd2lkdGg6MjsiIC8+PC9nPjx0ZXh0IHg9IjEzMy41MDAwMDAiIHk9IjQxMi41MDAwMDAiIGZpbGw9IiMwQTBGMjUiIGNsYXNzPSJ0ZXh0LWJvbGQgZmlsbC1OMSIgc3R5bGU9InRleHQtYW5jaG9yOm1pZGRsZTtmb250LXNpemU6MTZweCI+RGV2ZWxvcGVyIFJldmlld3MgUGxhbiBPdXRwdXQ8L3RleHQ+PC9nPjxnIGNsYXNzPSJZWEJ3Y205MlpRPT0iPjxnIGNsYXNzPSJzaGFwZSIgPjxyZWN0IHg9IjI2LjAwMDAwMCIgeT0iNTYxLjAwMDAwMCIgd2lkdGg9IjIxNS4wMDAwMDAiIGhlaWdodD0iNjYuMDAwMDAwIiBzdHJva2U9IiMxZTI5M2IiIGZpbGw9IiM2NDc0OGIiIHN0eWxlPSJzdHJva2Utd2lkdGg6MjsiIC8+PC9nPjx0ZXh0IHg9IjEzMy41MDAwMDAiIHk9IjU5OS41MDAwMDAiIGZpbGw9IiNmMWY1ZjkiIGNsYXNzPSJ0ZXh0LWJvbGQiIHN0eWxlPSJ0ZXh0LWFuY2hvcjptaWRkbGU7Zm9udC1zaXplOjE2cHgiPmF0bGFudGlzIGFwcGx5IENvbW1lbnQ8L3RleHQ+PC9nPjxnIGNsYXNzPSJZWEJ3YkhrPSI+PGcgY2xhc3M9InNoYXBlIiA+PHJlY3QgeD0iNDIuMDAwMDAwIiB5PSI3NDguMDAwMDAwIiB3aWR0aD0iMTg0LjAwMDAwMCIgaGVpZ2h0PSI2Ni4wMDAwMDAiIHN0cm9rZT0iIzFlMjkzYiIgZmlsbD0iIzY0NzQ4YiIgc3R5bGU9InN0cm9rZS13aWR0aDoyOyIgLz48L2c+PHRleHQgeD0iMTM0LjAwMDAwMCIgeT0iNzg2LjUwMDAwMCIgZmlsbD0iI2YxZjVmOSIgY2xhc3M9InRleHQtYm9sZCIgc3R5bGU9InRleHQtYW5jaG9yOm1pZGRsZTtmb250LXNpemU6MTZweCI+QXRsYW50aXMgUnVucyBBcHBseTwvdGV4dD48L2c+PGcgY2xhc3M9ImJHbDJaUT09Ij48ZyBjbGFzcz0ic2hhcGUiID48cmVjdCB4PSIzNy4wMDAwMDAiIHk9IjkzNS4wMDAwMDAiIHdpZHRoPSIxOTQuMDAwMDAwIiBoZWlnaHQ9IjY2LjAwMDAwMCIgc3Ryb2tlPSIjMWUyOTNiIiBmaWxsPSIjMWUyOTNiIiBzdHlsZT0ic3Ryb2tlLXdpZHRoOjI7IiAvPjwvZz48dGV4dCB4PSIxMzQuMDAwMDAwIiB5PSI5NzMuNTAwMDAwIiBmaWxsPSIjZjFmNWY5IiBjbGFzcz0idGV4dC1ib2xkIiBzdHlsZT0idGV4dC1hbmNob3I6bWlkZGxlO2ZvbnQtc2l6ZToxNnB4Ij5SZXNvdXJjZSBMaXZlIGluIEFXUzwvdGV4dD48L2c+PGcgY2xhc3M9IktIQnlJQzBtWjNRN0lIQnNZVzRwV3pCZCI+PG1hcmtlciBpZD0ibWstZDItMzUyNTI1NzA0LTM0ODgzNzgxMzQiIG1hcmtlcldpZHRoPSIxMC4wMDAwMDAiIG1hcmtlckhlaWdodD0iMTIuMDAwMDAwIiByZWZYPSI3LjAwMDAwMCIgcmVmWT0iNi4wMDAwMDAiIHZpZXdCb3g9IjAuMDAwMDAwIDAuMDAwMDAwIDEwLjAwMDAwMCAxMi4wMDAwMDAiIG9yaWVudD0iYXV0byIgbWFya2VyVW5pdHM9InVzZXJTcGFjZU9uVXNlIj4gPHBvbHlnb24gcG9pbnRzPSIwLjAwMDAwMCwwLjAwMDAwMCAxMC4wMDAwMDAsNi4wMDAwMDAgMC4wMDAwMDAsMTIuMDAwMDAwIiBmaWxsPSIjMEQzMkIyIiBjbGFzcz0iY29ubmVjdGlvbiBmaWxsLUIxIiBzdHJva2Utd2lkdGg9IjIiIC8+IDwvbWFya2VyPjxwYXRoIGQ9Ik0gMTMzLjUwMDAwMCA2Ny41MDAwMDAgQyAxMzMuNTAwMDAwIDExNC4zMDAwMDMgMTMzLjUwMDAwMCAxMzguNjk5OTk3IDEzMy41MDAwMDAgMTgzLjUwMDAwMCIgc3Ryb2tlPSIjMEQzMkIyIiBmaWxsPSJub25lIiBjbGFzcz0iY29ubmVjdGlvbiBzdHJva2UtQjEiIHN0eWxlPSJzdHJva2Utd2lkdGg6MjsiIG1hcmtlci1lbmQ9InVybCgjbWstZDItMzUyNTI1NzA0LTM0ODgzNzgxMzQpIiBtYXNrPSJ1cmwoI2QyLTM1MjUyNTcwNCkiIC8+PHRleHQgeD0iMTM0LjAwMDAwMCIgeT0iMTMyLjAwMDAwMCIgZmlsbD0iIzY3NkM3RSIgY2xhc3M9InRleHQtaXRhbGljIGZpbGwtTjIiIHN0eWxlPSJ0ZXh0LWFuY2hvcjptaWRkbGU7Zm9udC1zaXplOjE2cHgiPm9uIFBSIG9wZW48L3RleHQ+PC9nPjxnIGNsYXNzPSJLSEJzWVc0Z0xTWm5kRHNnY21WMmFXVjNLVnN3WFE9PSI+PHBhdGggZD0iTSAxMzMuNTAwMDAwIDI1NC41MDAwMDAgQyAxMzMuNTAwMDAwIDMwMS4yOTk5ODggMTMzLjUwMDAwMCAzMjUuNzAwMDEyIDEzMy41MDAwMDAgMzcwLjUwMDAwMCIgc3Ryb2tlPSIjMEQzMkIyIiBmaWxsPSJub25lIiBjbGFzcz0iY29ubmVjdGlvbiBzdHJva2UtQjEiIHN0eWxlPSJzdHJva2Utd2lkdGg6MjsiIG1hcmtlci1lbmQ9InVybCgjbWstZDItMzUyNTI1NzA0LTM0ODgzNzgxMzQpIiBtYXNrPSJ1cmwoI2QyLTM1MjUyNTcwNCkiIC8+PHRleHQgeD0iMTMzLjUwMDAwMCIgeT0iMzE5LjAwMDAwMCIgZmlsbD0iIzY3NkM3RSIgY2xhc3M9InRleHQtaXRhbGljIGZpbGwtTjIiIHN0eWxlPSJ0ZXh0LWFuY2hvcjptaWRkbGU7Zm9udC1zaXplOjE2cHgiPnBsYW4gb3V0cHV0IGluIFBSIGNvbW1lbnQ8L3RleHQ+PC9nPjxnIGNsYXNzPSJLSEpsZG1sbGR5QXRKbWQwT3lCaGNIQnliM1psS1Zzd1hRPT0iPjxwYXRoIGQ9Ik0gMTMzLjUwMDAwMCA0NDEuNTAwMDAwIEMgMTMzLjUwMDAwMCA0ODguMjk5OTg4IDEzMy41MDAwMDAgNTEyLjcwMDAxMiAxMzMuNTAwMDAwIDU1Ny41MDAwMDAiIHN0cm9rZT0iIzBEMzJCMiIgZmlsbD0ibm9uZSIgY2xhc3M9ImNvbm5lY3Rpb24gc3Ryb2tlLUIxIiBzdHlsZT0ic3Ryb2tlLXdpZHRoOjI7IiBtYXJrZXItZW5kPSJ1cmwoI21rLWQyLTM1MjUyNTcwNC0zNDg4Mzc4MTM0KSIgbWFzaz0idXJsKCNkMi0zNTI1MjU3MDQpIiAvPjx0ZXh0IHg9IjEzNC4wMDAwMDAiIHk9IjUwNi4wMDAwMDAiIGZpbGw9IiM2NzZDN0UiIGNsYXNzPSJ0ZXh0LWl0YWxpYyBmaWxsLU4yIiBzdHlsZT0idGV4dC1hbmNob3I6bWlkZGxlO2ZvbnQtc2l6ZToxNnB4Ij5kZXZlbG9wZXIgdHlwZXMgYXRsYW50aXMgYXBwbHk8L3RleHQ+PC9nPjxnIGNsYXNzPSJLR0Z3Y0hKdmRtVWdMU1puZERzZ1lYQndiSGtwV3pCZCI+PHBhdGggZD0iTSAxMzMuNTAwMDAwIDYyOC41MDAwMDAgQyAxMzMuNTAwMDAwIDY3NS4yOTk5ODggMTMzLjUwMDAwMCA2OTkuNzAwMDEyIDEzMy41MDAwMDAgNzQ0LjUwMDAwMCIgc3Ryb2tlPSIjMEQzMkIyIiBmaWxsPSJub25lIiBjbGFzcz0iY29ubmVjdGlvbiBzdHJva2UtQjEiIHN0eWxlPSJzdHJva2Utd2lkdGg6MjsiIG1hcmtlci1lbmQ9InVybCgjbWstZDItMzUyNTI1NzA0LTM0ODgzNzgxMzQpIiBtYXNrPSJ1cmwoI2QyLTM1MjUyNTcwNCkiIC8+PHRleHQgeD0iMTMzLjUwMDAwMCIgeT0iNjkzLjAwMDAwMCIgZmlsbD0iIzY3NkM3RSIgY2xhc3M9InRleHQtaXRhbGljIGZpbGwtTjIiIHN0eWxlPSJ0ZXh0LWFuY2hvcjptaWRkbGU7Zm9udC1zaXplOjE2cHgiPkF0bGFudGlzIGF1dGhlbnRpY2F0ZXMgKyBhcHBsaWVzPC90ZXh0PjwvZz48ZyBjbGFzcz0iS0dGd2NHeDVJQzBtWjNRN0lHeHBkbVVwV3pCZCI+PHBhdGggZD0iTSAxMzMuNTAwMDAwIDgxNS41MDAwMDAgQyAxMzMuNTAwMDAwIDg2Mi4yOTk5ODggMTMzLjUwMDAwMCA4ODYuNzAwMDEyIDEzMy41MDAwMDAgOTMxLjUwMDAwMCIgc3Ryb2tlPSIjMEQzMkIyIiBmaWxsPSJub25lIiBjbGFzcz0iY29ubmVjdGlvbiBzdHJva2UtQjEiIHN0eWxlPSJzdHJva2Utd2lkdGg6MjsiIG1hcmtlci1lbmQ9InVybCgjbWstZDItMzUyNTI1NzA0LTM0ODgzNzgxMzQpIiBtYXNrPSJ1cmwoI2QyLTM1MjUyNTcwNCkiIC8+PHRleHQgeD0iMTM0LjAwMDAwMCIgeT0iODgwLjAwMDAwMCIgZmlsbD0iIzY3NkM3RSIgY2xhc3M9InRleHQtaXRhbGljIGZpbGwtTjIiIHN0eWxlPSJ0ZXh0LWFuY2hvcjptaWRkbGU7Zm9udC1zaXplOjE2cHgiPnVuZGVyIDEwIG1pbnV0ZXMgdG90YWw8L3RleHQ+PC9nPjxtYXNrIGlkPSJkMi0zNTI1MjU3MDQiIG1hc2tVbml0cz0idXNlclNwYWNlT25Vc2UiIHg9Ii0xMDEiIHk9Ii0xMDEiIHdpZHRoPSI0NjkiIGhlaWdodD0iMTIwMyI+CjxyZWN0IHg9Ii0xMDEiIHk9Ii0xMDEiIHdpZHRoPSI0NjkiIGhlaWdodD0iMTIwMyIgZmlsbD0id2hpdGUiPjwvcmVjdD4KPHJlY3QgeD0iOTUuMDAwMDAwIiB5PSIxMTYuMDAwMDAwIiB3aWR0aD0iNzgiIGhlaWdodD0iMjEiIGZpbGw9ImJsYWNrIj48L3JlY3Q+CjxyZWN0IHg9IjQxLjAwMDAwMCIgeT0iMzAzLjAwMDAwMCIgd2lkdGg9IjE4NSIgaGVpZ2h0PSIyMSIgZmlsbD0iYmxhY2siPjwvcmVjdD4KPHJlY3QgeD0iMzMuMDAwMDAwIiB5PSI0OTAuMDAwMDAwIiB3aWR0aD0iMjAyIiBoZWlnaHQ9IjIxIiBmaWxsPSJibGFjayI+PC9yZWN0Pgo8cmVjdCB4PSIyOC4wMDAwMDAiIHk9IjY3Ny4wMDAwMDAiIHdpZHRoPSIyMTEiIGhlaWdodD0iMjEiIGZpbGw9ImJsYWNrIj48L3JlY3Q+CjxyZWN0IHg9IjU4LjAwMDAwMCIgeT0iODY0LjAwMDAwMCIgd2lkdGg9IjE1MiIgaGVpZ2h0PSIyMSIgZmlsbD0iYmxhY2siPjwvcmVjdD4KPC9tYXNrPjwvc3ZnPjwvc3ZnPgo=" alt="Architecture diagram" /></div>
<p>A developer using this flow from PR open to resource live in under 10 minutes. No platform engineer in the loop. The plan output in the PR comment shows exactly what will be created, which resources, which tags, which costs if Infracost is wired in. Developers can review their own plan before applying.</p>
<p>Spacelift and Terraform Cloud provide equivalent workflows if you prefer a managed control plane over a self-hosted Atlantis pod. The mechanism is the same: PR triggers plan, comment triggers apply, platform engineer is not required.</p>
<p>The infrastructure repository where modules live is version-controlled separately from application repositories. Developers open PRs against a <code>modules/</code> directory, reference the shared module using a relative path or private registry source, and supply only the variables the module exposes. Platform engineers review module updates, not individual resource provisioning requests.</p>
<h2>What the Ticket Data Showed Before and After</h2>
<p>We tracked tickets for 60 days before rollout and 90 days after. The before period establishes the baseline. The after period starts 30 days post-rollout to account for the learning curve as developers adopted the new workflow.</p>
<table>
<thead><tr><th style="text-align:left">Ticket Category</th><th style="text-align:left">Before (per month)</th><th style="text-align:left">After (per month)</th><th style="text-align:left">Delta</th></tr></thead>
<tbody>
<tr><td style="text-align:left">EKS service provisioning</td><td style="text-align:left">47</td><td style="text-align:left">6</td><td style="text-align:left">-87%</td></tr>
<tr><td style="text-align:left">RDS instance requests</td><td style="text-align:left">31</td><td style="text-align:left">9</td><td style="text-align:left">-71%</td></tr>
<tr><td style="text-align:left">S3 bucket + policy setup</td><td style="text-align:left">28</td><td style="text-align:left">4</td><td style="text-align:left">-86%</td></tr>
<tr><td style="text-align:left">SQS queue creation</td><td style="text-align:left">19</td><td style="text-align:left">3</td><td style="text-align:left">-84%</td></tr>
<tr><td style="text-align:left">Lambda function setup</td><td style="text-align:left">14</td><td style="text-align:left">5</td><td style="text-align:left">-64%</td></tr>
<tr><td style="text-align:left">VPC subnet requests</td><td style="text-align:left">11</td><td style="text-align:left">2</td><td style="text-align:left">-82%</td></tr>
<tr><td style="text-align:left">IAM role requests</td><td style="text-align:left">38</td><td style="text-align:left">22</td><td style="text-align:left">-42%</td></tr>
<tr><td style="text-align:left">ECR repository setup</td><td style="text-align:left">9</td><td style="text-align:left">1</td><td style="text-align:left">-89%</td></tr>
<tr><td style="text-align:left">Other (one-off, complex)</td><td style="text-align:left">41</td><td style="text-align:left">39</td><td style="text-align:left">-5%</td></tr>
<tr><td style="text-align:left"><strong>Total</strong></td><td style="text-align:left"><strong>238</strong></td><td style="text-align:left"><strong>91</strong></td><td style="text-align:left"><strong>-62%</strong></td></tr>
</tbody>
</table>
<p>IAM role tickets showed the smallest reduction for a specific reason: a significant portion of IAM work involves cross-account trust relationships and fine-grained permission debugging that the module cannot automate. The module handles the common case, not the edge case. Developers who need non-standard IAM configurations still file tickets, and those are genuinely complex.</p>
<p>The "other" category barely moved. Those tickets involve multi-region failover setups, cross-account peering, custom WAF rules, and one-off compliance remediation. Those are not repeat tickets. They are genuinely novel work, which is exactly what platform engineers should be spending time on.</p>
<p>Platform engineers reclaimed roughly 180 person-hours per month from ticket work. That time went into module maintenance, Atlantis operations, and building the next layer of automation.</p>
<h2>Where Modules Break: The Failure Modes</h2>
<p>Self-service Terraform is not maintenance-free. Three failure modes appear consistently in production.</p>
<table>
<thead><tr><th style="text-align:left">Failure Mode</th><th style="text-align:left">Cause</th><th style="text-align:left">Mitigation</th></tr></thead>
<tbody>
<tr><td style="text-align:left">State drift</td><td style="text-align:left">Developer modifies resource outside Terraform (console, CLI)</td><td style="text-align:left"><code>terraform refresh</code> on a schedule; lock console access for module-managed resources</td></tr>
<tr><td style="text-align:left">Version mismatch</td><td style="text-align:left">Teams pin old module versions; a security fix in v1.4 never reaches teams on v1.1</td><td style="text-align:left">Enforce minimum version in CI; send breaking change notifications to module users</td></tr>
<tr><td style="text-align:left">Bad default <a href="https://zop.dev/resources/blogs/closed-loop-cloud-remediation">blast radius</a></td><td style="text-align:left">A wrong default (too-permissive security group, wrong retention) propagates to every resource using the module</td><td style="text-align:left">Test module changes in staging first; use semver and never silently change defaults in a patch release</td></tr>
</tbody>
</table>
<p>The version mismatch problem is the one teams underestimate. Once a module ships, teams pin to a version and stay there. If a security default changes in a later version, every team on the old version keeps the old behavior. We address this with two controls: Atlantis is configured to warn on modules older than two minor versions, and we maintain a <code>CHANGELOG.md</code> in the module repo with explicit callouts for default changes.</p>
<p>Drift is a related problem. The module enforces defaults at creation time. If an engineer later modifies the resource in the AWS console, the module does not know. Scheduled <code>terraform plan</code> runs catch this: any plan that shows unexpected changes signals drift. We run these on a 24-hour schedule and route non-empty plans to a Slack channel.</p>
<p>The blast radius concern is real but manageable. A bad default in a module is worse than a bad default in a one-off Terraform file because it propagates to every resource ever created with that module. This is also why modules are strictly better than shared snippets: you can fix a bad default in one place and roll the fix forward via version bumps, something you cannot do with copy-pasted Terraform.</p>
<h2>How to Ship Your First Module in a Week</h2>
<p>The practical <a href="https://zop.dev/resources/blogs/cross-vpc-datastore-connectivity-psc-cloud-sql">starting point</a> is not architecture. It is your ticket backlog.</p>
<div class="d2-diagram"><img src="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIGRhdGEtZDItdmVyc2lvbj0iMC43LjEiIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaW5ZTWluIG1lZXQiIHZpZXdCb3g9IjAgMCA0ODcgMTE4MiI+PHN2ZyBjbGFzcz0iZDItMTg3OTA4NjA4NSBkMi1zdmciIHdpZHRoPSI0ODciIGhlaWdodD0iMTE4MiIgdmlld0JveD0iLTEwMSAtMTAxIDQ4NyAxMTgyIj48cmVjdCB4PSItMTAxLjAwMDAwMCIgeT0iLTEwMS4wMDAwMDAiIHdpZHRoPSI0ODcuMDAwMDAwIiBoZWlnaHQ9IjExODIuMDAwMDAwIiByeD0iMC4wMDAwMDAiIGZpbGw9IiNGRkZGRkYiIGNsYXNzPSIgZmlsbC1ONyIgc3Ryb2tlLXdpZHRoPSIwIiAvPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCFbQ0RBVEFbCi5kMi0xODc5MDg2MDg1IC50ZXh0LWJvbGQgewoJZm9udC1mYW1pbHk6ICJkMi0xODc5MDg2MDg1LWZvbnQtYm9sZCI7Cn0KQGZvbnQtZmFjZSB7Cglmb250LWZhbWlseTogZDItMTg3OTA4NjA4NS1mb250LWJvbGQ7CglzcmM6IHVybCgiZGF0YTphcHBsaWNhdGlvbi9mb250LXdvZmY7YmFzZTY0LGQwOUdSZ0FCQUFBQUFBOVFBQW9BQUFBQUZ5Z0FBZ3VGQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCUFV5OHlBQUFBOUFBQUFHQUFBQUJnWHhIWHJtTnRZWEFBQUFGVUFBQUFtd0FBQU5BRFFBU0daMng1WmdBQUFmQUFBQWkrQUFBTHFEN0YvcVpvWldGa0FBQUtzQUFBQURZQUFBQTJHMzhlMUdob1pXRUFBQXJvQUFBQUpBQUFBQ1FLZndYamFHMTBlQUFBQ3d3QUFBQ09BQUFBa0VlbUJVOXNiMk5oQUFBTG5BQUFBRW9BQUFCS09TdzJwRzFoZUhBQUFBdm9BQUFBSUFBQUFDQUFQQUQzYm1GdFpRQUFEQWdBQUFNb0FBQUlLZ2p3VmtGd2IzTjBBQUFQTUFBQUFCMEFBQUFnLzlFQU1nQURBaW9DdkFBRkFBQUNpZ0pZQUFBQVN3S0tBbGdBQUFGZUFESUJLUUFBQWdzSEF3TUVBd0lDQkdBQUF2Y0FBQUFEQUFBQUFBQUFBQUJCUkVKUEFDQUFJUC8vQXU3L0JnQUFBOWdCRVNBQUFaOEFBQUFBQWZBQ2xBQUFBQ0FBQTNpY2RNMDVTZ01CQUViaGI1eHhIM1hjdDFISEV5aDRBckVXQkF0clM3RVJPdytrdG9LSXJVSXVrZ09FUUM3d0IxSW5yMzNGaDBLcFFLM1NRNnRScW5VdVhMcHk3Y2F0Ty9jZVBIbnhsakQxUG5yMm1xU2ZVWVlaNUQ5LytjMVB2dk9WejN6a2ZlTE1ybkR1VEdkT3FUSnZ3YUlseTFhc3FxMVp0Nkd4YWN1MkhidjI3RHR3Nk1peDFvbFR4Z0FBQVAvL0FRQUEvLys4YmlXeEFIaWNYRlp0YkJ0M0dYLytmMTk4c1hOT2NqNmZ6Kzl2WjkrZDdkaU9mYll2TDA2Y05JNlRwbkh6MGpWcHQ3eDAxV2c3MHFhbFRXazZyZG9IeGdaYnFnRXBvbHRoR3hVVE1IVkkwNFRFaGdJQ2lZMXFsZmFoRytNRFkwT2dmaGdTTThOQ2JFcHNkR2VuU2Z2aDhqOHA1K2YzUEwvbjkzdWVQelRCSkFBK2lxK0FEZ3pRQm1aZ0FXVGFUNGRrVWVSSlJWWVVudE1wSXFMSlNXeXV2dklUTVV5RXcwVEVkOVg3Mk9JaUtpM2dLMXNuSHlvZFBmcmZ4ZDdlNm90dnZsVzlqTTY5QllCclh3TGdJYndHQnFBQkdGSVdCVUhrOVhvZEl6Tzh5Sk4zMnA5dE16bE5CR1gvOHRicnQzNG92U09oc1Z3dXVTeW5UMVcvaWRlMlZxNWRBd0JBRUs5VmNDZStDazZBcG9BZ1pOTFpySnl5Y3FRZzhBRzluclZZNVZSVzRmUm9mdnFaQXdjdlQrY2Y4ZSszSzN6SDN1ak1xSlMzN1orbXhyOS82dVR6VTNKZ2dYT25Gdlk4Y2lab256c0NDRW9BK0RXOEJsNjFYcG14V2prNW0xVVltZVpWQ0lVblNWNFVlUTltMmRLUEh6V2FqWVNSTmg1LytTblNvQ015ODFQemFZSm9KdkZhOWErdWZvK24zNFVDV3l1ZitTWW12ZGUrK09LYWQzTEM5eGtBMWpBNjhScFFZTkZRVWxZcmE5SHJlWjZsNVZRbUxmQjg2WlBSODhYaXl2RFU2T3BBcm9EWHhMbUo4YU9KajlEMENUbFNyNSt2VmJBUlg0V0lWcitvV05XQ00ybEJGT1A0WGpKWWk1WGo2Z2pJTXZCRTZnRitSb3JINU9oQmYwN29mYlRRZFNheXp6Y2dDckh1eUFPOXhaNWxxalArRlk4UWNIdmQ1bUJyb3BqSUhrcDNST2J0VHEvTDQ2RUR0Z2VHczNOZGdLQVZRT2ZEYStBSGtIVzdlTnA1MC9HNmVtOUozZE1YZnhEVHQrb0pJMk1zWGlvYUdTTkJtc2pZNVpVM0I1cE5UWVRlMU55SDE2cnZ5Y2ZUNmVNeVNsYmZTNTdJWkk2blVISnJCVWxDS1Jnc0NkVS9BNFpJcllMZVI1dGdCeDZBQzZoTlY3UVNTVkVybUtWNUZVOUpaWldNcG9IZkZDYWZYTWQ4MkRzUXpDU1dlaGFQclJvSjcwaXpQY1RzejNtcDJmeitRMjErMGNZKzdBNHVuNjMrUTNieFp6bG0xaGgxMnpoUSt6UllxMkFyM2dDTHFnYVZaWjdrYVprbE5UQ05VRkhsbkErUXJOV0todjFEYm9JNnQwNjRDNEhjb1VSdThaQ1FuZWtJV3lUSzc4dmdqUnZqRG5mLzE4WVBYc3l2RnNlZmlyMXJidFg2R0t4VjBBYmFCTWY5T3E1M3JxNWlQYklQbng0Yy9Yb2hQdUlhNW4yWmZMN1RGbWQ2UWpOVTMvbnBBeXQ5SG03UlBUNDRVR0xianZpY29PVXUxaXBvRTI4QUE3NXRyclRBWWtiZXhkSzJRRDZmTzkyN21BNTMyZlhycTBiQ1VjUTIwY3hFTFh3MlFUMTdjZXA4djhzMi92T3RvYVNEWDdYWTN6VzNEbzNzSFFhczVmNDN0QW0yQmovYklDbzFwRjlWcEpxN1RrNnJLTWc3Y25iUDBNbmVrZmtFZ2FzZkdvdkpURFlwTEx6d2h0Z1J5Rkw5SzlOVEsvbjhVb0VKR2JLeS83RERnM3JDbVVSZDZ6WUF0SUp2cXFmcVErVStmYk15eTlNUDd0a1RuQnp5cHR1ZEpnZmw5QncrakM2ZGFuSm1adEtVL21SVGsxL3duS3QrQTBBSGdWb01rMmdURXRBTFl4b3pRaWF0RXFHS0tiTmRBaWV6Zk1PVUFWSHJneW92aTE2djAweFdKNDJwdi9NQlFmdms4NTZGcmhIRzZiTTV3ajBMbVE3L0x5ZElRL3FRNHZhYUErSEp1WWNMajQrNVJkSHRGc1Z3YWtBTXlYWS81ZXk3N2VqcXlFbUVTZkk2VSsyRXVSRE5UVWpVVWt2QTBqMFdOTFpaR1hQdmtEd1ZSemNqWVRFc1NlRklkVDFvNTlwMU9wdmQ1YTV6TTZnMlc5T29Pa2thMm1ScG50YXlKT25CZGRLMUx6VzFkOTN0YzBrMnZISGpzRDI2TkYrOWhmeFp5YzVWWDRkYURSUUErQWpmeGdJRUFJQUVIcDY1Rzl1RE40RFNZdE95SXBNTUw1THM0SFBFajE3K3hhOWZPcFBIRzlYbFA5eXEvdVYzSTQrcDM5Y3F5SXczb0sydU9GcW03d3I0aitPOTY3U2hpZFNicVJEMTBEN01iMzNJbVJFNjFVVFdjWFJ1dEtuTkVscFd4NGZhM1hzcUllK2VnNnFIaThuTUlPTWZTMDd1VzNmN1FwM3Fud1FxRDNoalVTbVEzQzZ2cy9wNjQ5am1DVzAyZUdwZzdPWnAxVWo0U25lSlF1VzhKM1lQVDNXOWE5cHB1Mi9yN0l5Q2hqS1FOWCs2VURpZHp5OFhDc3Y1V0R3ZWk4ZGlEYS8yclJ5WVB0OTNvVFF3T0s1YXRqNW5SckVWYlFJREhnQnVKenROZm9MSXNjek9tRkh6ZE84Vkh6eVJXOHo2Y282bUNTRTdFNDFZcEYvaG55VWQvTGZQSFZ6Tk8rMFQzMFhCdTBOR3F4MDloemJCZkErL2RmZlVLM2VPQzZ6TGFEUFoyMTE5RmxTZVRTV2JtcDRnaUhDcStna2dZR3NWOUJMYUJGSHI2ODZ1RWVxNzVtNHdkZE40TUd2UjMwNGVGL1lFOGw2L3h4MTNlSHFsUnc5MnozcjNPTktPN203QjF4YytRUW5lT2J1VFkyZ3JZNlNDM2VIaEdkRjJ5R0lWYmZiV0ZyNDdQalJmMXpaZHE2Qmx2QUtjeG5ZbXcyY1VSVmJkdm1zd3d0eEVZWngrN01JRjNrM1pqUnlqVUYrZHVYbEsvK1NUNTk2SmhQVEVrcDZxeDhyVkt1aC9xS3oyL3g1dDBvMXgrS2VwdmVzZW4wdXdycSsyNkx4ajFOSThTbGMvem9RZGJqUmFiUjhPZFFCU2ZZQnFxQXdtYmVkeGpVMm55TG8zZm5wbFFOMXFCc1k0ZVBrNktuOGFLb2xpS2ZScHRYMTdmdUV5S2pkMjVjN3Zka1hnRy9jZ2tyenkrUGM2OVVZOVFab015aE5kaGphU0lBMWs0bHNYYnNSSUUwbVFMV1FIS3Q4SmpRckNHSDlITzBkRGQ2cnRiL05GU1NyeWIydDRhdE1ycUF4MkFKa1JkOEdRM0E1TzY5WG5YdXd3V28xRXM3azVjUFU3ejcvWVNYRVVZYkFZUklUL05jbEdXVGJLVHRiK1BjMTJzR3pVT3EzR3BXcjlhQXVWVmZYdjZFQlI3cUdpRmE5YS9XME8wdHdja296a2I2K010SmlOUkROdHlGMit3WFZOL0Y1UG5FRk5RYmNEL2YyRFFESEVqL0FmVkZ2NkQwYnFPeXRVcTZCLzRxZWhwZUd2dXJaWWkrb3RUVytOcTUwVk5SKzdkT21ZK3RnbGpwUHNOc2xtazZoWHIxOS81WlhyMTE4OUcxcVluWjBMQk9abVp4ZENhdDdXV2dWOWpKK0c4UDM2NVRQYnB0MitRVmowcXNsVTUvMm5kSW92dUl0U29zczFOand6SUFrQnhUUFdjYlRuNkVWRlZrWUdsNmlVTk84S2lrRlgySG9pSWZoREhzZURRdlNoQThtaWxXZ3Y5ZmNlaU5aMVo2b2RRVm44TnVnQU9FYldtVzRldWZteTd0am1DdzFmd3Z1b3JQNVBuYStENjZoY2JRZFVldzEzd3dGOEcxb0E2RjBzaE9MeFVDZ2V4OTBSbm8rb0Qvd2ZBQUQvL3dFQUFQLy9CaXhoK3dBQUFBRUFBQUFDQzRVRHpRRVZYdzg4OVFBQkErZ0FBQUFBMkYyZ2hBQUFBQURkWmk4Mi9qZit4QWh0QS9FQUFRQURBQUlBQUFBQUFBQUFBUUFBQTlqKzd3QUFDSmorTi80M0NHMEFBUUFBQUFBQUFBQUFBQUFBQUFBQUFDUjRuQnpLUFE3QmNCakg4ZS96YXlKRVZTWFZkREpRa1hoYlNmUS9QSXV0aVFTRDA3aUJtMWlzTG1CM215NlYyRDk2Y2VJRENtMmpJMXMxMUxwUWE4MHMycEJveUZJQnR5K2xBZ3QxS08xS29aeXBEcmhsN0ZUaU5zR2pHNjRLMStwdjNSNjR2Um5iblpIMlZPb1RSMTBLaVVROVlxWE1sWkxibVlGbE9MVFBId0FBQVAvL0FRQUEvLzgySFJNd0FBQUFBQUFzQUN3QVVBQjhBSzRBMEFFUUFVb0JnZ0cwQWVBQ0VnSkdBbXdDMUFMMkF3SURHZ00yQTJnRGlnTzJBK1lFQmdSQ0JHZ0VpZ1NtQk40RkNnVTZCV1lGcEFXeUJiNEYxQUFBQUFFQUFBQWtBSkFBREFCakFBY0FBUUFBQUFBQUFBQUFBQUFBQUFBRUFBTjRuSnlVejI0YlZSVEdmMDVzMHdyQkFrVlZ1b251Z2tXUjZOaFVTZFUySzRmVWlrVVVCNDhMUWtKSUU4LzRqektlR1hrbUR1RUpXUE1XdkVWWFBBVFBnVmlqK1h6czJBWFJKb3FTZkhmdStmT2RjNzV6Z1IzK1pwdEs5U0h3UnoweFhHR3ZmbTU0aXdmMUU4UGJ0T3RiaHFzOHFmMXB1RVpZbXh1dTgzbXRaL2dqM2xaL00veUEvZXBQaGgreVcyMGIvcGhuMVIzRG4ydzcvakw4S2Z1OFhlQUt2T0JYd3hWMnlReHZzY09QaHJkNWhNV3NWSGxFMDNDTno5Z3pYR2NQNkRPaElHWkN3Z2pIa0FranJwZ1JrZU1UTVdQQ2tJZ1FSNGNXTVlXK0pnUkNqdEYvZmczd0taZ1JLT0tZQWtlTVQweEF6dGdpL2lLdmxITmxIT28wczdzV0JXTUNMdVJ4U1VDQ0kyVkVTa0xFcGVJVUZHUzhva0dEbklINFpoVGtlT1JNaVBGSW1UR2lRWmMycC9RWk15SEgwVmFra3BsUHlwQ0Nhd0xsZDJaUmRtWkFSRUp1cks1SUNNWFRpVjhrN3c2bk9McGtzbDJQZkxvUjRVc2MzOG03NUpiSzlpczgvYm8xWnB0NWwyd0M1dXBucks3RXVybldCTWU2TGZPMitGYTQ0Qlh1WHYzWlpQTCtIb1g2WHlqeUJWZWFmNmhKSldLUzROd3VMWHdweUhlUGNSenAzTUZYUjc2blE1OFR1cnlocjNPTEhqMWFuTkdudzJ2NWR1bmgrSm91Wnh6TG95Tzh1R3RMTVdmOGdPTWJPcklwWTBmV244WEVJbjRtTTNYbjRqaFRIVk15OWJ4azdxbldTQlhlZmNMbERxVWI2c2psTTlBZWxaWk84MHUwWndFalUwVW1obFAxY3FtTjNQb1htaUttcXFXYzdlMTl1UTF6MjczbEZ0K1Fhb2RMdFM0NGxaTmJNSHJmVkwxM05IT3RINCtBa0pRTFdReEltZEtnNEVhOHp3bTRJc1p4ck82ZGFFc0tXaXVmTXMrTlZCSXhGWU1PaWVMTXlQUTNNTjM0eG4yd29YdG5iMGtvLzVMcDVhcXErMlJ4NnRYdGpONm9lOHM3MzdvY3JVMmdZVk5OMTlRMEVOZkV0QjlwcDliNSsvTE45YnFsUE9XSWxKandYeS9BTXp5YTdIUEFJV05sR09obWJxOURVeTlFazVjY3F2cExJbGtOcGVmSUloemc4WndERG5qSjgzZjZ1R1Rpakl0YmNWblAzZUtZSTdvY2ZsQVZDL3N1Ujd4ZWZmdi9yTCtMYVZPMU9KNnVUaS91UGNVbmQxRHJGOXF6Mi9leXA0bVZrNWhidE51dE9DTmdXbkp4dStzMXVjZDQvd0FBQVAvL0FRQUEvLy8wdDA5UmVKeGlZR1lBZy8vbkdJd1lzQUFBQUFBQS8vOEJBQUQvL3k4QkFnTUFBQUE9Iik7Cn0KLmQyLTE4NzkwODYwODUgLnRleHQtaXRhbGljIHsKCWZvbnQtZmFtaWx5OiAiZDItMTg3OTA4NjA4NS1mb250LWl0YWxpYyI7Cn0KQGZvbnQtZmFjZSB7Cglmb250LWZhbWlseTogZDItMTg3OTA4NjA4NS1mb250LWl0YWxpYzsKCXNyYzogdXJsKCJkYXRhOmFwcGxpY2F0aW9uL2ZvbnQtd29mZjtiYXNlNjQsZDA5R1JnQUJBQUFBQUE5Z0FBb0FBQUFBRjhnQUFSaFJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJQVXk4eUFBQUE5QUFBQUdBQUFBQmdXMVNWZUdOdFlYQUFBQUZVQUFBQW13QUFBTkFEUUFTR1oyeDVaZ0FBQWZBQUFBak9BQUFNUUNOdm82aG9aV0ZrQUFBS3dBQUFBRFlBQUFBMkc3VXIybWhvWldFQUFBcjRBQUFBSkFBQUFDUUxlQWpJYUcxMGVBQUFDeHdBQUFDUUFBQUFrRUdGQTRWc2IyTmhBQUFMckFBQUFFb0FBQUJLTzVRNHltMWhlSEFBQUF2NEFBQUFJQUFBQUNBQVBBRDJibUZ0WlFBQURCZ0FBQU1tQUFBSU1nbnRWek53YjNOMEFBQVBRQUFBQUNBQUFBQWcvOFlBTWdBREFlRUJrQUFGQUFBQ2lnSlkvL0VBU3dLS0FsZ0FSQUZlQURJQkl3QUFBZ3NGQXdNRUF3a0NCQ0FBQUhjQUFBQURBQUFBQUFBQUFBQkJSRUpQQUFFQUlQLy9BdTcvQmdBQUE5Z0JFU0FBQVpNQUFBQUFBZVlDbEFBQUFDQUFBM2ljZE0wNVNnTUJBRWJoYjV4eEgzWGN0MUhIRXloNEFyRVdCQXRyUzdFUk93K2t0b0tJclVJdWtnT0VRQzd3QjFJbnIzM0ZoMEtwUUszU1E2dFJxblV1WExweTdjYXRPL2NlUEhueGxqRDFQbnIybXFTZlVZWVo1RDkvK2MxUHZ2T1Z6M3prZmVMTXJuRHVUR2RPcVRKdndhSWx5MWFzcXExWnQ2R3hhY3UySGJ2MjdEdHc2TWl4MW9sVHhnQUFBUC8vQVFBQS8vKzhiaVd4QUhpY2ZKWmRiTnZXMmNlZmMwaUwvbEJzUzVTb1NMWWtXNGNpOVVISkZpbUpsbVZKdGlWYnNpM0ZkaEluYm1MSFNkT2tjWnIzZmQzazNkWWlEZm9GRkVHeFpXNVJvRmhSYk4zV0FSMTZsOTZzMk5CaDdiQjU2ekpzUXpaMFh4ZnJoMU0wSzlvYVh0Y1dOVFdRVW16WkY3c2hEaVR3UE9mNW5mLy8veENhZ0FmQS80dWZBUXBhb0FPc1lBZFEyRjZLVWxTVk9DaEZGQW5EcUNMTE12eGphTzJ4NStqOHNmY0NMM3d1ZWVuaW96K2MrdWZKbC9Feld4ZlFJNHNQUDZ3ZHYzcm16TkhidDdVUSt0TnRBQUJjZlJNQS9SR3ZRZ3RZQUZoR0VRVkJKQ1lUUWdwTFJNSzhNL2hHSzkxSzB5NUYrdzI2NTFoNTF2citNbnB3WlNWK2ZpQjFyemFMVjdkV2J0d0FRSkNxYnVJSWZoNjhBRTArUVVqRXMxaVJPUWNqQ01UWGp1MDJqbFBrcE9vd21aQnY2bHl5LzlpVjhzRHMvaVNiRkFhWFJubmZaRHFRN3lIOG9qbi93SUhLTTE4cnFxRmdqNWk1NTRHaDlHS2lwMHYyUmtDdlFRRHdUL0FxT1BYK0ZkYWhxS3hDRVRhWlZBbERFVW8vTjBPUnh4ZFRIRDMreHVMalUrVVdsNW1lL3BtVTRXaFRlL01rWHRXK2ZmVXF1bnRyQlYyVXpvZWYxbDVFQzA5THk1SjJEYkN4ZHdTdlFodllqTjFsem00em1RaWhXRVZPSnVJQ0llVHhWeGN1VGo1NmVEaytzblRtZkxsMEJxOU9IcG01TjZaOWhvb3oweWtGakRPYXE1dEl3ODlEQ01EaEUwVFY2RHNSRjBSUmg1Sk1ia014bWV3Mnp1SGdqRHEzOGl1QmxIdE9IWnFOK011aGRHSWhuVDdwVlp6alVYL0NIZVBMZmZIMFdmUGdZRGdzRndaNG1ZdTZKbFQ1b0J3UFJEMUJiMytYME1kRnVvdnE0UEU0SUZnQ29DUzhDcjFHRjVUSnhDakpwTW9xTEdlejExYUlVUEdrYXJCYWFwbHBwU2lhZHZSekx4WmJFRzBMMjY1VnRJM1RERVowZTYvbEZieXFQUnUva0VoY2lLTmw3ZG40ZmNua2ZYRzB2TFdDbnVLblJiRXNhdituYXdqRTZpYjZERzJBVGFmbzhHMWZ2cUlxRk5FcmlYSlNWYmVWOE1wd1dabzhvWWdaQzgxbVQrV2FhVEp2RmFaNXlTNTM4L21FTjJZK1BqZis0SUlTNk0xb3JwSy9iemphOTJmQkY1cFlsSE1aUTdQZ3JXNmlqL0VhMkhWbjZKUUpRMWlGMFRzMTdxMGRpM0lXNjVmbU16RU14MzBnWml5VUxYZXRJbktZUHh3eHlpZjRmTUxUSC9UTmtxaE5NUWQ2TTNqdHRaUHU4TEVqZXVuaDBNU2lrczJFL0xjRUh5RHdWemZSZGJRQjNidTYyN25GdXJMZm1yNUhxcHhLU0VOY2hCWGMvVWVTcWNHZUpPZHpWY3huRnd1WDV2cDh6bjZIdmJDU0h4MTNXV1NiSCs2d3cySkRMenZzL2p1OFFTdlZLVlJXNi9RTytQZlNFM3VXWHRzYTJJc1BHNzM4RkcyQUMveU45WFFWTXIybWJaZFNTbEpYcmQ3aHUwZVdJMU1ML2VxSXg5eWsvYnlsSng5eXB4d2U5K3kzcXBpeUJrbmloUG44cWJHVmcxSjBSdTVXMm5NemZxZEZzWHVSdjIzL3Z1NllkdzRRaEFIUU4vQk5jT2lhSkRuYzZBS0dVUmhDaGVkeWJTT2RIUWN5cnBDMXE3WEwwaHRzdHR4dFBqMkhYa28xelU0ZTJ0ZW1NcTF5K0ZCV205ZVpvU3FQTnRBR2VDSGE2REpWTlpuSWJ2V1pUTlF1ZWkvSGpoQytleXlRbld4M0NvZjdNalBoaVlXWWtMVlFiTzRzZXlsRlpuMWhMdFpOUmhSUDM5OEVkOExoS3crZkU2UWpjL24vdjB2VzlVZ3RuVVc5NGREdkJGOXdmTDQvbmE1NTNndUEzc0pyOVZ6YTBTRmpoRk1pcnJkSmVhOVYranZwNEVFcG0yak9sb2RvdXRSZGlvN2h0ZHNaMGpjeTRPVzFYeVBKdG4vZlZDaXF2VlN0Nm52Q0YvZzZGc0FIQUNZZ3BaMWFIK0kxTU5mOHJkZGppY2d3M211VmsvanorZGUvY21CeHhZWFhORGRDYjJydmZYanhNaUNRcXB2d0JWNERxMDRyRVZlTlhMRGI2bGY5UHlPbXk1VXJDRmtvRTROYU9YUE80c1QzYlQzRnRGQldoTk0wdlYwWGY0QTI5RnpUYTlaYWROUWJOZTNxdExIcFV6bUdGZzRKZzdHbXZubC9Ka25UMlVxR3BvdjJralNtTXhqblN1RXh0RDdCeDlTQXBJd01XRHkyUmc0N3F4M09hQVAyTjU1aEwyYTlZdkJnZEJkbG84SmV5TnYrUTM5Rkc5QUI3a1kvMUVMRThFRGQ1RGVuVDBpVEorVHBKV25xUkNneXF5UmwvV0UrZDN6czBseTA5aHdlWFNtTUZ2TXJoZEZ4WTdaK1dsWFF4MmlqNW0ybTRjVHRtQmlweGJDN2NxcjF5WnlKOHM5RkRZdkx3aENMcmQ0Zk5PYlVEZnpLc0RkU043ajMzSGNRcWdlVjhMNi9kMGNmRDZFTjZHeGc1R0NFTzJ6YWFIYzU0clIzZGJyNHNqZUQxaGVsVEV1aE9aZldiZ0NxZmxuZFJGZlFCb2g3WjlmZTBhVlBydHJnK241czBkbnZHQlpDbWVCQU5DVk5TTkhKN2lpcjlBcXhaRTgyM24vUUhBOEkza0NVdUVTdkt4c01qL2g1VDhEbWluZzlndFUzSkVVS2Z2M01ROVZOTkk4dmJPZHJVdFZUUWpHU29TRmZYeDJPMHloVmJDdnpJMTJYelZkU1ZMZXYzZFZtNmV3ejV5SWRybjNJbW1wNjRvbXM5b0hWNnZHME5xbE1oNzczUUhVVGZZVFdkVy9lMlh0SC9XdzlZbC9lVm1iSlhaVEd5dnBRQ2h3Mmo2b1dMNHVTMmszV3FVc0d6V3V1U1ZLZjgya0E5QSswRHZzQWRCZHluS00rWFI4cmxubmFSTk1XbnYxbVJkdEM2OW90TWtYNENSNDVOVmZ0M1hFQS9FdTBic3pveG5kM1ZoU2hhdDloRExWTXlwMElJYnFqcS9PUktRdldKN09yOCtIUzM1ZmFqVi9kSFY5RjY5cmJ2b0xQVi9BaFQ4UEtoVnBKaWVkTFJQc1VVUFVtQVBwRGpRTmhSY1ZSTDZVcWpJUFV2L2tZUnZyTDhRT2g1bmFHN3VqcG1EdTBkbnBhYXJhMDBwMCs5Z1RDNzE3Z1JMc3RhTC93cjA4dWNsR09reHlYQUZEMTlXb2ZlZ2V0Z3d1QU1UUmpCUEV1SXUzWTFOclQ3clJhL1NOTzY2R3kwTlJNMFJhLzlldGw3VzFudXZSN2hrbTFaR1NDYm1rZjlWWUlLZnVRWmV1VHZvcFU4MmVvdW9sK2k1OEVpMDdMc2ZObHVYdk1HK0crSmhmOW9ZbVRDWG1jRDA0c3hjUjgzQzFGamFkNTRIVDJydTgrVkJ3OG5UMzJ3dVh4VE9IK3E0WDgwYkg3cnhaR2p3S3EvcnU2aVg2Rm40VEFIdDBUZFRzQkdQRk8wdGxyd3YveHlCbVA0cGlNRlk0ZVBtT2VQaTdLaWp2dkZnOHR6aHlkbWt5a004dm1rVWpBRjU5S0thT0R3WXdubE94MktMbVowY3lDbmJhVTVNeGRNWjNkajZvbjBmZndMNEFDWUpDQ1N1ajZnRlo1Z1RyNzVYUGJYb1liYUYzL1g4OTY3Nm5LM1dqZEVCR0NJcDZDNi9nNnRBR3docTVyeDN1QTlSQ0h6VTN3bElOejl1N25uRDMvQVFBQS8vOEJBQUQvL3h5SGlROEFBQUFCQUFBQUFSaFJSU1FVUFY4UFBQVUFBUVBvQUFBQUFOaGRvTXdBQUFBQTNXWXZOLzY5L3QwSUhRUEpBQUlBQXdBQ0FBQUFBQUFBQUFFQUFBUFkvdThBQUFoQS9yMzl2QWdkQStnQXd2L1JBQUFBQUFBQUFBQUFBQUFrQW5RQUpBRElBQUFCL3YvTEFpWUFPUUxCQUNNQ0pnQWpBZm9BREFMMEFGOENHUUFuQWhnQUh3R3pBQ1VDRndBbkFlRUFKUUVhQUNzQ0V3QUJBZ3NBSHdEdEFCOEIzQUFmQVBnQUxBTWZBQjhDRFFBZkFnTUFKd0lYLy9ZQlZnQWZBWkwvL0FGRkFEd0NFQUE0QWNBQU93TERBRVlCcmYvVUFjRC93Z0hnQUNvQjRQLzNBVlQvdUFEdEFCOEFBQUJIQUFBQUxnQXVBRklBaEFDeUFOWUJGZ0ZRQVlnQndBSHVBaVlDWUFLSUF0QUMrZ01HQXlBRFFnT0VBNjREM0FRV0JEUUVjQVNlQk1vRTZBVWlCVTRGZmdXd0Jld0YvQVlLQmlBQUFBQUJBQUFBSkFDTUFBd0FaZ0FIQUFFQUFBQUFBQUFBQUFBQUFBQUFCQUFEZUp5Y2xOdE9HMWNVaGo4SDIyMTZ1cWhRUkc3UXZreWxaRXlqRUNYaHlwU2dqSXB3Nm5GNmtLcEtnejAraVBITXlET1lraWZvZGQraWI1R3JQa2Fmb3VwMXRYOHZneDFGUVNBRS9IdjJPdnhyclg5dFlKUC8yS0JXdnd2ODNad2JyckhkL05ud0hiNW9IaG5lWUwvNW1lRTZEeHYvR0c0d2FMdzEzT1JCbzJ2NEU5N1YvelQ4S1UvcXZ4bSt5MWI5MFBEblBLNXZHdjV5dy9HdjRhOTR3cnNGcnNFei9qQmNZNHZDOEIwMitkWHdCdmV3bUxVNjk5Z3gzT0JydGcwMzJRWjZUS2hJbVpBeHdqRmt3b2d6WmlTVVJDVE1tREFrWVlBanBFMUtwYThac1pCajlNR3ZNUkVWTTJKRkhGUGhTSWxJaVNrWlc4UzM4c3A1cll4RG5XWjIxNlppVE15SlBFNkp5WERrak1qSlNEaFZuSXFLZ2hlMGFGSFNGOStDaXBLQWtna3BBVGt6UnJUb2NNZ1JQY1pNS0hFY0twSm5GcEV6cE9LY1dQbWRXZmpPOUVuSUtJM1ZHUmtEOFhUaWw4Zzc1QWhIaDBLMnE1R1AxaUk4eFBHanZEMjNYTGJmRXVqWHJUQmJ6N3RrRXpOWFAxTjFKZFhOdVNZNDFxM1AyK1lINFlvWHVGdjFaNTNKOVQwYTZIK2x5Q2VjYWY0RFRTb1Rrd3pudG1nVFNVR1J1NDlqWCtlUVNCMzVpWkFlcitqd2hwN09iYnAwYVhOTWo1Q1g4dTNReGZFZEhZNDVrRWNvdkxnN2xHS08rUVhIOTRTeThiRVQ2ODlpWWdtL1U1aTZTM0djcVk0cGhYcnVtUWVxTlZHRk41K3czNkY4VFIybGZQcmFJMi9wTkw5TWV4WXpNbFVVWWpoVkw1ZmFLSzEvQTFQRVZMWDQyVjdkKzIyWTIrNHR0L2lDWER2czFicmc1Q2UzWUhUZFZJUDNOSE91bjRDWUFUa25zdWlUTTZWRnhZVjR2eWJtakJUSGdicjNTbHRTMGI3MDhYa3VwSktFcVJpRVpJb3pvOURmMkhRVEdmZittdTZkdlNVRCtYdW1wNWRWM1NhTFU2K3VadlJHM1Z2ZVJkYmxaR1VDTFp0cXZxS212cmhtcHYxRU83WEtQNUp2cWRjdDV4R2g0aTUyKzBPdndBN1AyV1dQc2JMMGRUTy92UE92aExmWVV3ZE9TV1ExbEtaOURZOEoyQ1hnS2J2czhweW43L1Z5eWNZWkg3ZkdaelYvbXdQMjZiQjNiVFVMMnc3N3ZGeUw5dkhNZjRudGp1cHhQTG84UGJ2MU5CL2NRTFhmYU4rdTNzMnVKdWVuTWJkb1Y5dHhUTXpVYzNGYnF6VzUrd1QvQXdBQS8vOEJBQUQvLzNLaFVVQUFBQUFEQUFELzlRQUEvODRBTWdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSIpOwp9XV0+PC9zdHlsZT48c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhW0NEQVRBWy5zaGFwZSB7CiAgc2hhcGUtcmVuZGVyaW5nOiBnZW9tZXRyaWNQcmVjaXNpb247CiAgc3Ryb2tlLWxpbmVqb2luOiByb3VuZDsKfQouY29ubmVjdGlvbiB7CiAgc3Ryb2tlLWxpbmVjYXA6IHJvdW5kOwogIHN0cm9rZS1saW5lam9pbjogcm91bmQ7Cn0KLmJsZW5kIHsKICBtaXgtYmxlbmQtbW9kZTogbXVsdGlwbHk7CiAgb3BhY2l0eTogMC41Owp9CgoJCS5kMi0xODc5MDg2MDg1IC5maWxsLU4xe2ZpbGw6IzBBMEYyNTt9CgkJLmQyLTE4NzkwODYwODUgLmZpbGwtTjJ7ZmlsbDojNjc2QzdFO30KCQkuZDItMTg3OTA4NjA4NSAuZmlsbC1OM3tmaWxsOiM5NDk5QUI7fQoJCS5kMi0xODc5MDg2MDg1IC5maWxsLU40e2ZpbGw6I0NGRDJERDt9CgkJLmQyLTE4NzkwODYwODUgLmZpbGwtTjV7ZmlsbDojREVFMUVCO30KCQkuZDItMTg3OTA4NjA4NSAuZmlsbC1ONntmaWxsOiNFRUYxRjg7fQoJCS5kMi0xODc5MDg2MDg1IC5maWxsLU43e2ZpbGw6I0ZGRkZGRjt9CgkJLmQyLTE4NzkwODYwODUgLmZpbGwtQjF7ZmlsbDojMEQzMkIyO30KCQkuZDItMTg3OTA4NjA4NSAuZmlsbC1CMntmaWxsOiMwRDMyQjI7fQoJCS5kMi0xODc5MDg2MDg1IC5maWxsLUIze2ZpbGw6I0UzRTlGRDt9CgkJLmQyLTE4NzkwODYwODUgLmZpbGwtQjR7ZmlsbDojRTNFOUZEO30KCQkuZDItMTg3OTA4NjA4NSAuZmlsbC1CNXtmaWxsOiNFREYwRkQ7fQoJCS5kMi0xODc5MDg2MDg1IC5maWxsLUI2e2ZpbGw6I0Y3RjhGRTt9CgkJLmQyLTE4NzkwODYwODUgLmZpbGwtQUEye2ZpbGw6IzRBNkZGMzt9CgkJLmQyLTE4NzkwODYwODUgLmZpbGwtQUE0e2ZpbGw6I0VERjBGRDt9CgkJLmQyLTE4NzkwODYwODUgLmZpbGwtQUE1e2ZpbGw6I0Y3RjhGRTt9CgkJLmQyLTE4NzkwODYwODUgLmZpbGwtQUI0e2ZpbGw6I0VERjBGRDt9CgkJLmQyLTE4NzkwODYwODUgLmZpbGwtQUI1e2ZpbGw6I0Y3RjhGRTt9CgkJLmQyLTE4NzkwODYwODUgLnN0cm9rZS1OMXtzdHJva2U6IzBBMEYyNTt9CgkJLmQyLTE4NzkwODYwODUgLnN0cm9rZS1OMntzdHJva2U6IzY3NkM3RTt9CgkJLmQyLTE4NzkwODYwODUgLnN0cm9rZS1OM3tzdHJva2U6Izk0OTlBQjt9CgkJLmQyLTE4NzkwODYwODUgLnN0cm9rZS1ONHtzdHJva2U6I0NGRDJERDt9CgkJLmQyLTE4NzkwODYwODUgLnN0cm9rZS1ONXtzdHJva2U6I0RFRTFFQjt9CgkJLmQyLTE4NzkwODYwODUgLnN0cm9rZS1ONntzdHJva2U6I0VFRjFGODt9CgkJLmQyLTE4NzkwODYwODUgLnN0cm9rZS1ON3tzdHJva2U6I0ZGRkZGRjt9CgkJLmQyLTE4NzkwODYwODUgLnN0cm9rZS1CMXtzdHJva2U6IzBEMzJCMjt9CgkJLmQyLTE4NzkwODYwODUgLnN0cm9rZS1CMntzdHJva2U6IzBEMzJCMjt9CgkJLmQyLTE4NzkwODYwODUgLnN0cm9rZS1CM3tzdHJva2U6I0UzRTlGRDt9CgkJLmQyLTE4NzkwODYwODUgLnN0cm9rZS1CNHtzdHJva2U6I0UzRTlGRDt9CgkJLmQyLTE4NzkwODYwODUgLnN0cm9rZS1CNXtzdHJva2U6I0VERjBGRDt9CgkJLmQyLTE4NzkwODYwODUgLnN0cm9rZS1CNntzdHJva2U6I0Y3RjhGRTt9CgkJLmQyLTE4NzkwODYwODUgLnN0cm9rZS1BQTJ7c3Ryb2tlOiM0QTZGRjM7fQoJCS5kMi0xODc5MDg2MDg1IC5zdHJva2UtQUE0e3N0cm9rZTojRURGMEZEO30KCQkuZDItMTg3OTA4NjA4NSAuc3Ryb2tlLUFBNXtzdHJva2U6I0Y3RjhGRTt9CgkJLmQyLTE4NzkwODYwODUgLnN0cm9rZS1BQjR7c3Ryb2tlOiNFREYwRkQ7fQoJCS5kMi0xODc5MDg2MDg1IC5zdHJva2UtQUI1e3N0cm9rZTojRjdGOEZFO30KCQkuZDItMTg3OTA4NjA4NSAuYmFja2dyb3VuZC1jb2xvci1OMXtiYWNrZ3JvdW5kLWNvbG9yOiMwQTBGMjU7fQoJCS5kMi0xODc5MDg2MDg1IC5iYWNrZ3JvdW5kLWNvbG9yLU4ye2JhY2tncm91bmQtY29sb3I6IzY3NkM3RTt9CgkJLmQyLTE4NzkwODYwODUgLmJhY2tncm91bmQtY29sb3ItTjN7YmFja2dyb3VuZC1jb2xvcjojOTQ5OUFCO30KCQkuZDItMTg3OTA4NjA4NSAuYmFja2dyb3VuZC1jb2xvci1ONHtiYWNrZ3JvdW5kLWNvbG9yOiNDRkQyREQ7fQoJCS5kMi0xODc5MDg2MDg1IC5iYWNrZ3JvdW5kLWNvbG9yLU41e2JhY2tncm91bmQtY29sb3I6I0RFRTFFQjt9CgkJLmQyLTE4NzkwODYwODUgLmJhY2tncm91bmQtY29sb3ItTjZ7YmFja2dyb3VuZC1jb2xvcjojRUVGMUY4O30KCQkuZDItMTg3OTA4NjA4NSAuYmFja2dyb3VuZC1jb2xvci1ON3tiYWNrZ3JvdW5kLWNvbG9yOiNGRkZGRkY7fQoJCS5kMi0xODc5MDg2MDg1IC5iYWNrZ3JvdW5kLWNvbG9yLUIxe2JhY2tncm91bmQtY29sb3I6IzBEMzJCMjt9CgkJLmQyLTE4NzkwODYwODUgLmJhY2tncm91bmQtY29sb3ItQjJ7YmFja2dyb3VuZC1jb2xvcjojMEQzMkIyO30KCQkuZDItMTg3OTA4NjA4NSAuYmFja2dyb3VuZC1jb2xvci1CM3tiYWNrZ3JvdW5kLWNvbG9yOiNFM0U5RkQ7fQoJCS5kMi0xODc5MDg2MDg1IC5iYWNrZ3JvdW5kLWNvbG9yLUI0e2JhY2tncm91bmQtY29sb3I6I0UzRTlGRDt9CgkJLmQyLTE4NzkwODYwODUgLmJhY2tncm91bmQtY29sb3ItQjV7YmFja2dyb3VuZC1jb2xvcjojRURGMEZEO30KCQkuZDItMTg3OTA4NjA4NSAuYmFja2dyb3VuZC1jb2xvci1CNntiYWNrZ3JvdW5kLWNvbG9yOiNGN0Y4RkU7fQoJCS5kMi0xODc5MDg2MDg1IC5iYWNrZ3JvdW5kLWNvbG9yLUFBMntiYWNrZ3JvdW5kLWNvbG9yOiM0QTZGRjM7fQoJCS5kMi0xODc5MDg2MDg1IC5iYWNrZ3JvdW5kLWNvbG9yLUFBNHtiYWNrZ3JvdW5kLWNvbG9yOiNFREYwRkQ7fQoJCS5kMi0xODc5MDg2MDg1IC5iYWNrZ3JvdW5kLWNvbG9yLUFBNXtiYWNrZ3JvdW5kLWNvbG9yOiNGN0Y4RkU7fQoJCS5kMi0xODc5MDg2MDg1IC5iYWNrZ3JvdW5kLWNvbG9yLUFCNHtiYWNrZ3JvdW5kLWNvbG9yOiNFREYwRkQ7fQoJCS5kMi0xODc5MDg2MDg1IC5iYWNrZ3JvdW5kLWNvbG9yLUFCNXtiYWNrZ3JvdW5kLWNvbG9yOiNGN0Y4RkU7fQoJCS5kMi0xODc5MDg2MDg1IC5jb2xvci1OMXtjb2xvcjojMEEwRjI1O30KCQkuZDItMTg3OTA4NjA4NSAuY29sb3ItTjJ7Y29sb3I6IzY3NkM3RTt9CgkJLmQyLTE4NzkwODYwODUgLmNvbG9yLU4ze2NvbG9yOiM5NDk5QUI7fQoJCS5kMi0xODc5MDg2MDg1IC5jb2xvci1ONHtjb2xvcjojQ0ZEMkREO30KCQkuZDItMTg3OTA4NjA4NSAuY29sb3ItTjV7Y29sb3I6I0RFRTFFQjt9CgkJLmQyLTE4NzkwODYwODUgLmNvbG9yLU42e2NvbG9yOiNFRUYxRjg7fQoJCS5kMi0xODc5MDg2MDg1IC5jb2xvci1ON3tjb2xvcjojRkZGRkZGO30KCQkuZDItMTg3OTA4NjA4NSAuY29sb3ItQjF7Y29sb3I6IzBEMzJCMjt9CgkJLmQyLTE4NzkwODYwODUgLmNvbG9yLUIye2NvbG9yOiMwRDMyQjI7fQoJCS5kMi0xODc5MDg2MDg1IC5jb2xvci1CM3tjb2xvcjojRTNFOUZEO30KCQkuZDItMTg3OTA4NjA4NSAuY29sb3ItQjR7Y29sb3I6I0UzRTlGRDt9CgkJLmQyLTE4NzkwODYwODUgLmNvbG9yLUI1e2NvbG9yOiNFREYwRkQ7fQoJCS5kMi0xODc5MDg2MDg1IC5jb2xvci1CNntjb2xvcjojRjdGOEZFO30KCQkuZDItMTg3OTA4NjA4NSAuY29sb3ItQUEye2NvbG9yOiM0QTZGRjM7fQoJCS5kMi0xODc5MDg2MDg1IC5jb2xvci1BQTR7Y29sb3I6I0VERjBGRDt9CgkJLmQyLTE4NzkwODYwODUgLmNvbG9yLUFBNXtjb2xvcjojRjdGOEZFO30KCQkuZDItMTg3OTA4NjA4NSAuY29sb3ItQUI0e2NvbG9yOiNFREYwRkQ7fQoJCS5kMi0xODc5MDg2MDg1IC5jb2xvci1BQjV7Y29sb3I6I0Y3RjhGRTt9LmFwcGVuZGl4IHRleHQudGV4dHtmaWxsOiMwQTBGMjV9Lm1key0tY29sb3ItZmctZGVmYXVsdDojMEEwRjI1Oy0tY29sb3ItZmctbXV0ZWQ6IzY3NkM3RTstLWNvbG9yLWZnLXN1YnRsZTojOTQ5OUFCOy0tY29sb3ItY2FudmFzLWRlZmF1bHQ6I0ZGRkZGRjstLWNvbG9yLWNhbnZhcy1zdWJ0bGU6I0VFRjFGODstLWNvbG9yLWJvcmRlci1kZWZhdWx0OiMwRDMyQjI7LS1jb2xvci1ib3JkZXItbXV0ZWQ6IzBEMzJCMjstLWNvbG9yLW5ldXRyYWwtbXV0ZWQ6I0VFRjFGODstLWNvbG9yLWFjY2VudC1mZzojMEQzMkIyOy0tY29sb3ItYWNjZW50LWVtcGhhc2lzOiMwRDMyQjI7LS1jb2xvci1hdHRlbnRpb24tc3VidGxlOiM2NzZDN0U7LS1jb2xvci1kYW5nZXItZmc6cmVkO30uc2tldGNoLW92ZXJsYXktQjF7ZmlsbDp1cmwoI3N0cmVha3MtZGFya2VyLWQyLTE4NzkwODYwODUpO21peC1ibGVuZC1tb2RlOmxpZ2h0ZW59LnNrZXRjaC1vdmVybGF5LUIye2ZpbGw6dXJsKCNzdHJlYWtzLWRhcmtlci1kMi0xODc5MDg2MDg1KTttaXgtYmxlbmQtbW9kZTpsaWdodGVufS5za2V0Y2gtb3ZlcmxheS1CM3tmaWxsOnVybCgjc3RyZWFrcy1icmlnaHQtZDItMTg3OTA4NjA4NSk7bWl4LWJsZW5kLW1vZGU6ZGFya2VufS5za2V0Y2gtb3ZlcmxheS1CNHtmaWxsOnVybCgjc3RyZWFrcy1icmlnaHQtZDItMTg3OTA4NjA4NSk7bWl4LWJsZW5kLW1vZGU6ZGFya2VufS5za2V0Y2gtb3ZlcmxheS1CNXtmaWxsOnVybCgjc3RyZWFrcy1icmlnaHQtZDItMTg3OTA4NjA4NSk7bWl4LWJsZW5kLW1vZGU6ZGFya2VufS5za2V0Y2gtb3ZlcmxheS1CNntmaWxsOnVybCgjc3RyZWFrcy1icmlnaHQtZDItMTg3OTA4NjA4NSk7bWl4LWJsZW5kLW1vZGU6ZGFya2VufS5za2V0Y2gtb3ZlcmxheS1BQTJ7ZmlsbDp1cmwoI3N0cmVha3MtZGFyay1kMi0xODc5MDg2MDg1KTttaXgtYmxlbmQtbW9kZTpvdmVybGF5fS5za2V0Y2gtb3ZlcmxheS1BQTR7ZmlsbDp1cmwoI3N0cmVha3MtYnJpZ2h0LWQyLTE4NzkwODYwODUpO21peC1ibGVuZC1tb2RlOmRhcmtlbn0uc2tldGNoLW92ZXJsYXktQUE1e2ZpbGw6dXJsKCNzdHJlYWtzLWJyaWdodC1kMi0xODc5MDg2MDg1KTttaXgtYmxlbmQtbW9kZTpkYXJrZW59LnNrZXRjaC1vdmVybGF5LUFCNHtmaWxsOnVybCgjc3RyZWFrcy1icmlnaHQtZDItMTg3OTA4NjA4NSk7bWl4LWJsZW5kLW1vZGU6ZGFya2VufS5za2V0Y2gtb3ZlcmxheS1BQjV7ZmlsbDp1cmwoI3N0cmVha3MtYnJpZ2h0LWQyLTE4NzkwODYwODUpO21peC1ibGVuZC1tb2RlOmRhcmtlbn0uc2tldGNoLW92ZXJsYXktTjF7ZmlsbDp1cmwoI3N0cmVha3MtZGFya2VyLWQyLTE4NzkwODYwODUpO21peC1ibGVuZC1tb2RlOmxpZ2h0ZW59LnNrZXRjaC1vdmVybGF5LU4ye2ZpbGw6dXJsKCNzdHJlYWtzLWRhcmstZDItMTg3OTA4NjA4NSk7bWl4LWJsZW5kLW1vZGU6b3ZlcmxheX0uc2tldGNoLW92ZXJsYXktTjN7ZmlsbDp1cmwoI3N0cmVha3Mtbm9ybWFsLWQyLTE4NzkwODYwODUpO21peC1ibGVuZC1tb2RlOmNvbG9yLWJ1cm59LnNrZXRjaC1vdmVybGF5LU40e2ZpbGw6dXJsKCNzdHJlYWtzLW5vcm1hbC1kMi0xODc5MDg2MDg1KTttaXgtYmxlbmQtbW9kZTpjb2xvci1idXJufS5za2V0Y2gtb3ZlcmxheS1ONXtmaWxsOnVybCgjc3RyZWFrcy1icmlnaHQtZDItMTg3OTA4NjA4NSk7bWl4LWJsZW5kLW1vZGU6ZGFya2VufS5za2V0Y2gtb3ZlcmxheS1ONntmaWxsOnVybCgjc3RyZWFrcy1icmlnaHQtZDItMTg3OTA4NjA4NSk7bWl4LWJsZW5kLW1vZGU6ZGFya2VufS5za2V0Y2gtb3ZlcmxheS1ON3tmaWxsOnVybCgjc3RyZWFrcy1icmlnaHQtZDItMTg3OTA4NjA4NSk7bWl4LWJsZW5kLW1vZGU6ZGFya2VufS5saWdodC1jb2Rle2Rpc3BsYXk6IGJsb2NrfS5kYXJrLWNvZGV7ZGlzcGxheTogbm9uZX1dXT48L3N0eWxlPjxnIGNsYXNzPSJjM1JsY0RFPSI+PGcgY2xhc3M9InNoYXBlIiA+PHJlY3QgeD0iNS4wMDAwMDAiIHk9IjAuMDAwMDAwIiB3aWR0aD0iMjc2LjAwMDAwMCIgaGVpZ2h0PSI2Ni4wMDAwMDAiIHN0cm9rZT0iIzQ3NTU2OSIgZmlsbD0iI2YxZjVmOSIgc3R5bGU9InN0cm9rZS13aWR0aDoyOyIgLz48L2c+PHRleHQgeD0iMTQzLjAwMDAwMCIgeT0iMzguNTAwMDAwIiBmaWxsPSIjMEEwRjI1IiBjbGFzcz0idGV4dC1ib2xkIGZpbGwtTjEiIHN0eWxlPSJ0ZXh0LWFuY2hvcjptaWRkbGU7Zm9udC1zaXplOjE2cHgiPlB1bGwgMyBtb250aHMgb2YgcGxhdGZvcm0gdGlja2V0czwvdGV4dD48L2c+PGcgY2xhc3M9ImMzUmxjREk9Ij48ZyBjbGFzcz0ic2hhcGUiID48cmVjdCB4PSIzNC4wMDAwMDAiIHk9IjE2Ni4wMDAwMDAiIHdpZHRoPSIyMTcuMDAwMDAwIiBoZWlnaHQ9IjY2LjAwMDAwMCIgc3Ryb2tlPSIjNDc1NTY5IiBmaWxsPSIjZjFmNWY5IiBzdHlsZT0ic3Ryb2tlLXdpZHRoOjI7IiAvPjwvZz48dGV4dCB4PSIxNDIuNTAwMDAwIiB5PSIyMDQuNTAwMDAwIiBmaWxsPSIjMEEwRjI1IiBjbGFzcz0idGV4dC1ib2xkIGZpbGwtTjEiIHN0eWxlPSJ0ZXh0LWFuY2hvcjptaWRkbGU7Zm9udC1zaXplOjE2cHgiPkNsdXN0ZXIgYnkgcmVzb3VyY2UgdHlwZTwvdGV4dD48L2c+PGcgY2xhc3M9ImMzUmxjRE09Ij48ZyBjbGFzcz0ic2hhcGUiID48cmVjdCB4PSI3LjAwMDAwMCIgeT0iMzUzLjAwMDAwMCIgd2lkdGg9IjI3MS4wMDAwMDAiIGhlaWdodD0iNjYuMDAwMDAwIiBzdHJva2U9IiMxZTI5M2IiIGZpbGw9IiM2NDc0OGIiIHN0eWxlPSJzdHJva2Utd2lkdGg6MjsiIC8+PC9nPjx0ZXh0IHg9IjE0Mi41MDAwMDAiIHk9IjM5MS41MDAwMDAiIGZpbGw9IiNmMWY1ZjkiIGNsYXNzPSJ0ZXh0LWJvbGQiIHN0eWxlPSJ0ZXh0LWFuY2hvcjptaWRkbGU7Zm9udC1zaXplOjE2cHgiPldyaXRlIG1vZHVsZSBmb3IgdG9wIHRpY2tldCB0eXBlPC90ZXh0PjwvZz48ZyBjbGFzcz0iYzNSbGNEUT0iPjxnIGNsYXNzPSJzaGFwZSIgPjxyZWN0IHg9IjMxLjAwMDAwMCIgeT0iNTQwLjAwMDAwMCIgd2lkdGg9IjIyMy4wMDAwMDAiIGhlaWdodD0iNjYuMDAwMDAwIiBzdHJva2U9IiMxZTI5M2IiIGZpbGw9IiM2NDc0OGIiIHN0eWxlPSJzdHJva2Utd2lkdGg6MjsiIC8+PC9nPjx0ZXh0IHg9IjE0Mi41MDAwMDAiIHk9IjU3OC41MDAwMDAiIGZpbGw9IiNmMWY1ZjkiIGNsYXNzPSJ0ZXh0LWJvbGQiIHN0eWxlPSJ0ZXh0LWFuY2hvcjptaWRkbGU7Zm9udC1zaXplOjE2cHgiPldpcmUgQXRsYW50aXMgdG8gb25lIHRlYW08L3RleHQ+PC9nPjxnIGNsYXNzPSJjM1JsY0RVPSI+PGcgY2xhc3M9InNoYXBlIiA+PHJlY3QgeD0iMC4wMDAwMDAiIHk9IjcyNy4wMDAwMDAiIHdpZHRoPSIyODUuMDAwMDAwIiBoZWlnaHQ9IjY2LjAwMDAwMCIgc3Ryb2tlPSIjMWUyOTNiIiBmaWxsPSIjMWUyOTNiIiBzdHlsZT0ic3Ryb2tlLXdpZHRoOjI7IiAvPjwvZz48dGV4dCB4PSIxNDIuNTAwMDAwIiB5PSI3NjUuNTAwMDAwIiBmaWxsPSIjZjFmNWY5IiBjbGFzcz0idGV4dC1ib2xkIiBzdHlsZT0idGV4dC1hbmNob3I6bWlkZGxlO2ZvbnQtc2l6ZToxNnB4Ij5NZWFzdXJlIHRpY2tldCB2b2x1bWUgZm9yIDMwIGRheXM8L3RleHQ+PC9nPjxnIGNsYXNzPSJjM1JsY0RZPSI+PGcgY2xhc3M9InNoYXBlIiA+PHJlY3QgeD0iNTguMDAwMDAwIiB5PSI5MTQuMDAwMDAwIiB3aWR0aD0iMTY5LjAwMDAwMCIgaGVpZ2h0PSI2Ni4wMDAwMDAiIHN0cm9rZT0iIzFlMjkzYiIgZmlsbD0iIzFlMjkzYiIgc3R5bGU9InN0cm9rZS13aWR0aDoyOyIgLz48L2c+PHRleHQgeD0iMTQyLjUwMDAwMCIgeT0iOTUyLjUwMDAwMCIgZmlsbD0iI2YxZjVmOSIgY2xhc3M9InRleHQtYm9sZCIgc3R5bGU9InRleHQtYW5jaG9yOm1pZGRsZTtmb250LXNpemU6MTZweCI+U2hpcCBuZXh0IG1vZHVsZTwvdGV4dD48L2c+PGcgY2xhc3M9IktITjBaWEF4SUMwbVozUTdJSE4wWlhBeUtWc3dYUT09Ij48bWFya2VyIGlkPSJtay1kMi0xODc5MDg2MDg1LTM0ODgzNzgxMzQiIG1hcmtlcldpZHRoPSIxMC4wMDAwMDAiIG1hcmtlckhlaWdodD0iMTIuMDAwMDAwIiByZWZYPSI3LjAwMDAwMCIgcmVmWT0iNi4wMDAwMDAiIHZpZXdCb3g9IjAuMDAwMDAwIDAuMDAwMDAwIDEwLjAwMDAwMCAxMi4wMDAwMDAiIG9yaWVudD0iYXV0byIgbWFya2VyVW5pdHM9InVzZXJTcGFjZU9uVXNlIj4gPHBvbHlnb24gcG9pbnRzPSIwLjAwMDAwMCwwLjAwMDAwMCAxMC4wMDAwMDAsNi4wMDAwMDAgMC4wMDAwMDAsMTIuMDAwMDAwIiBmaWxsPSIjMEQzMkIyIiBjbGFzcz0iY29ubmVjdGlvbiBmaWxsLUIxIiBzdHJva2Utd2lkdGg9IjIiIC8+IDwvbWFya2VyPjxwYXRoIGQ9Ik0gMTQyLjUwMDAwMCA2OC4wMDAwMDAgQyAxNDIuNTAwMDAwIDEwNi4wMDAwMDAgMTQyLjUwMDAwMCAxMjYuMDAwMDAwIDE0Mi41MDAwMDAgMTYyLjAwMDAwMCIgc3Ryb2tlPSIjMEQzMkIyIiBmaWxsPSJub25lIiBjbGFzcz0iY29ubmVjdGlvbiBzdHJva2UtQjEiIHN0eWxlPSJzdHJva2Utd2lkdGg6MjsiIG1hcmtlci1lbmQ9InVybCgjbWstZDItMTg3OTA4NjA4NS0zNDg4Mzc4MTM0KSIgbWFzaz0idXJsKCNkMi0xODc5MDg2MDg1KSIgLz48L2c+PGcgY2xhc3M9IktITjBaWEF5SUMwbVozUTdJSE4wWlhBektWc3dYUT09Ij48cGF0aCBkPSJNIDE0Mi41MDAwMDAgMjMzLjUwMDAwMCBDIDE0Mi41MDAwMDAgMjgwLjI5OTk4OCAxNDIuNTAwMDAwIDMwNC43MDAwMTIgMTQyLjUwMDAwMCAzNDkuNTAwMDAwIiBzdHJva2U9IiMwRDMyQjIiIGZpbGw9Im5vbmUiIGNsYXNzPSJjb25uZWN0aW9uIHN0cm9rZS1CMSIgc3R5bGU9InN0cm9rZS13aWR0aDoyOyIgbWFya2VyLWVuZD0idXJsKCNtay1kMi0xODc5MDg2MDg1LTM0ODgzNzgxMzQpIiBtYXNrPSJ1cmwoI2QyLTE4NzkwODYwODUpIiAvPjx0ZXh0IHg9IjE0My4wMDAwMDAiIHk9IjI5OC4wMDAwMDAiIGZpbGw9IiM2NzZDN0UiIGNsYXNzPSJ0ZXh0LWl0YWxpYyBmaWxsLU4yIiBzdHlsZT0idGV4dC1hbmNob3I6bWlkZGxlO2ZvbnQtc2l6ZToxNnB4Ij5oaWdoZXN0IHZvbHVtZSB3aW5zPC90ZXh0PjwvZz48ZyBjbGFzcz0iS0hOMFpYQXpJQzBtWjNRN0lITjBaWEEwS1Zzd1hRPT0iPjxwYXRoIGQ9Ik0gMTQyLjUwMDAwMCA0MjAuNTAwMDAwIEMgMTQyLjUwMDAwMCA0NjcuMjk5OTg4IDE0Mi41MDAwMDAgNDkxLjcwMDAxMiAxNDIuNTAwMDAwIDUzNi41MDAwMDAiIHN0cm9rZT0iIzBEMzJCMiIgZmlsbD0ibm9uZSIgY2xhc3M9ImNvbm5lY3Rpb24gc3Ryb2tlLUIxIiBzdHlsZT0ic3Ryb2tlLXdpZHRoOjI7IiBtYXJrZXItZW5kPSJ1cmwoI21rLWQyLTE4NzkwODYwODUtMzQ4ODM3ODEzNCkiIG1hc2s9InVybCgjZDItMTg3OTA4NjA4NSkiIC8+PHRleHQgeD0iMTQyLjUwMDAwMCIgeT0iNDg1LjAwMDAwMCIgZmlsbD0iIzY3NkM3RSIgY2xhc3M9InRleHQtaXRhbGljIGZpbGwtTjIiIHN0eWxlPSJ0ZXh0LWFuY2hvcjptaWRkbGU7Zm9udC1zaXplOjE2cHgiPm9uZSBwaWxvdCB0ZWFtPC90ZXh0PjwvZz48ZyBjbGFzcz0iS0hOMFpYQTBJQzBtWjNRN0lITjBaWEExS1Zzd1hRPT0iPjxwYXRoIGQ9Ik0gMTQyLjUwMDAwMCA2MDcuNTAwMDAwIEMgMTQyLjUwMDAwMCA2NTQuMjk5OTg4IDE0Mi41MDAwMDAgNjc4LjcwMDAxMiAxNDIuNTAwMDAwIDcyMy41MDAwMDAiIHN0cm9rZT0iIzBEMzJCMiIgZmlsbD0ibm9uZSIgY2xhc3M9ImNvbm5lY3Rpb24gc3Ryb2tlLUIxIiBzdHlsZT0ic3Ryb2tlLXdpZHRoOjI7IiBtYXJrZXItZW5kPSJ1cmwoI21rLWQyLTE4NzkwODYwODUtMzQ4ODM3ODEzNCkiIG1hc2s9InVybCgjZDItMTg3OTA4NjA4NSkiIC8+PHRleHQgeD0iMTQzLjAwMDAwMCIgeT0iNjcyLjAwMDAwMCIgZmlsbD0iIzY3NkM3RSIgY2xhc3M9InRleHQtaXRhbGljIGZpbGwtTjIiIHN0eWxlPSJ0ZXh0LWFuY2hvcjptaWRkbGU7Zm9udC1zaXplOjE2cHgiPnRyYWNrIGJlZm9yZS9hZnRlcjwvdGV4dD48L2c+PGcgY2xhc3M9IktITjBaWEExSUMwbVozUTdJSE4wWlhBMktWc3dYUT09Ij48cGF0aCBkPSJNIDE0Mi41MDAwMDAgNzk0LjUwMDAwMCBDIDE0Mi41MDAwMDAgODQxLjI5OTk4OCAxNDIuNTAwMDAwIDg2NS43MDAwMTIgMTQyLjUwMDAwMCA5MTAuNTAwMDAwIiBzdHJva2U9IiMwRDMyQjIiIGZpbGw9Im5vbmUiIGNsYXNzPSJjb25uZWN0aW9uIHN0cm9rZS1CMSIgc3R5bGU9InN0cm9rZS13aWR0aDoyOyIgbWFya2VyLWVuZD0idXJsKCNtay1kMi0xODc5MDg2MDg1LTM0ODgzNzgxMzQpIiBtYXNrPSJ1cmwoI2QyLTE4NzkwODYwODUpIiAvPjx0ZXh0IHg9IjE0My4wMDAwMDAiIHk9Ijg1OS4wMDAwMDAiIGZpbGw9IiM2NzZDN0UiIGNsYXNzPSJ0ZXh0LWl0YWxpYyBmaWxsLU4yIiBzdHlsZT0idGV4dC1hbmNob3I6bWlkZGxlO2ZvbnQtc2l6ZToxNnB4Ij5kYXRhIGRyaXZlcyBwcmlvcml0eTwvdGV4dD48L2c+PG1hc2sgaWQ9ImQyLTE4NzkwODYwODUiIG1hc2tVbml0cz0idXNlclNwYWNlT25Vc2UiIHg9Ii0xMDEiIHk9Ii0xMDEiIHdpZHRoPSI0ODciIGhlaWdodD0iMTE4MiI+CjxyZWN0IHg9Ii0xMDEiIHk9Ii0xMDEiIHdpZHRoPSI0ODciIGhlaWdodD0iMTE4MiIgZmlsbD0id2hpdGUiPjwvcmVjdD4KPHJlY3QgeD0iNzQuMDAwMDAwIiB5PSIyODIuMDAwMDAwIiB3aWR0aD0iMTM4IiBoZWlnaHQ9IjIxIiBmaWxsPSJibGFjayI+PC9yZWN0Pgo8cmVjdCB4PSI5My4wMDAwMDAiIHk9IjQ2OS4wMDAwMDAiIHdpZHRoPSI5OSIgaGVpZ2h0PSIyMSIgZmlsbD0iYmxhY2siPjwvcmVjdD4KPHJlY3QgeD0iODIuMDAwMDAwIiB5PSI2NTYuMDAwMDAwIiB3aWR0aD0iMTIyIiBoZWlnaHQ9IjIxIiBmaWxsPSJibGFjayI+PC9yZWN0Pgo8cmVjdCB4PSI3OC4wMDAwMDAiIHk9Ijg0My4wMDAwMDAiIHdpZHRoPSIxMzAiIGhlaWdodD0iMjEiIGZpbGw9ImJsYWNrIj48L3JlY3Q+CjwvbWFzaz48L3N2Zz48L3N2Zz4K" alt="Architecture diagram" /></div>
<p>Pull three months of tickets. Cluster them by resource type. The top cluster is your first module. Write that one module, wire it to one pilot team with Atlantis, and measure for 30 days before adding the next module.</p>
<p>The temptation is to build all eight modules at once before shipping any of them. This is how module projects stall: the scope grows, the work drags, and the platform team ships nothing while the ticket queue keeps filling. One module in production teaches you more about your team's usage patterns than eight modules in a design document.</p>
<p>The module itself should take two to three days for a senior engineer to write, test, and document. The Atlantis setup takes another day. The remaining time in the week goes to piloting with one team, collecting feedback, and hardening the variable validation.</p>
<p>If you want to see how <a href="https://zop.dev/resources/blog/internal-developer-platform-kubernetes-cost">internal developer platforms structure self-service infrastructure</a> alongside cost guardrails, that pattern extends naturally from module-level enforcement to platform-level <a href="https://zop.dev/resources/blog/policy-as-code-aws-kubernetes-guardrails">policy-as-code governance</a>. The module is the unit. The platform is the system.</p>
<p>The goal is not eight modules. The goal is 60% fewer tickets. Start with one. Measure. Ship the next one when the data tells you to.</p>
</div>
