code:
# On how to update dependencies see doc/how-to-create-gradle-dependencies-list.txt
# Don't forget to update var/gradle_dependencies_version when modifying this file
sha256sum | url
3a616a32f433e9e23f556b38575c31b013613d3ae85206263b7625fe1f4c151a | https://dl.google.com/dl/android/maven2/android/arch/core/common/1.1.1/common-1.1.1.jar
eb91acbeeaccc7fa382f88b02a22d5eddf314665bbb8fed090c067b703f50a5c | https://dl.google.com/dl/android/maven2/android/arch/core/common/1.1.1/common-1.1.1.pom
c3215aa5873311b3f88a6f4e4a3c25ad89971bc127de8c3e1291c57f93a05c39 | https://dl.google.com/dl/android/maven2/android/arch/core/runtime/1.1.1/runtime-1.1.1.aar
30453099142d085d801460a20d7e02a3f4d3004238879eaeb62083f59f1193a9 | https://dl.google.com/dl/android/maven2/android/arch/core/runtime/1.1.1/runtime-1.1.1.pom
8d378e88ebd5189e09eef623414812c868fd90aa519d6160e2311fb8b81cff56 | https://dl.google.com/dl/android/maven2/android/arch/lifecycle/common/1.1.1/common-1.1.1.jar
1742e74f222d06ea26f811191adf18e4cb74213b785e3f5d0d930224e83b4e82 | https://dl.google.com/dl/android/maven2/android/arch/lifecycle/common/1.1.1/common-1.1.1.pom
d6fdd8b985d6178d7ea2f16986a24e83f1bee936b74d43167c69e08d3cc12c50 | https://dl.google.com/dl/android/maven2/android/arch/lifecycle/livedata-core/1.1.1/livedata-core-1.1.1.aar
67a11cd85fd5c96ecdb84538e1eb58d7be59200e7d36d99943f31ecb514fe2a1 | https://dl.google.com/dl/android/maven2/android/arch/lifecycle/livedata-core/1.1.1/livedata-core-1.1.1.pom
50ab0490c1ff1a7cfb4e554032998b080888946d0dd424f39900efc4a1bcd750 | https://dl.google.com/dl/android/maven2/android/arch/lifecycle/livedata/1.1.1/livedata-1.1.1.aar
e8db306738739a616a74c38533a91cc066ee194fd45f492f188164e6cb1b856e | https://dl.google.com/dl/android/maven2/android/arch/lifecycle/livedata/1.1.1/livedata-1.1.1.pom
c4e4be66c1b2f0abec593571454e1de14013f7e0f96bf2a9f212931a48cae550 | https://dl.google.com/dl/android/maven2/android/arch/lifecycle/runtime/1.1.1/runtime-1.1.1.aar
c7a7d3c2a9d6c21d8b6d470933b9472c733a4799b3ff702081b608adf1c7e592 | https://dl.google.com/dl/android/maven2/android/arch/lifecycle/runtime/1.1.1/runtime-1.1.1.pom
7de29cfaba77d6b5d5be234c57f6812d0150d087e63941af22ba1d1f8e2bc96a | https://dl.google.com/dl/android/maven2/android/arch/lifecycle/viewmodel/1.1.1/viewmodel-1.1.1.aar
deae2518ee1d17db319fbaf4055e32d591d58569eb9ccad53d8d323cf1840555 | https://dl.google.com/dl/android/maven2/android/arch/lifecycle/viewmodel/1.1.1/viewmodel-1.1.1.pom
e6d2aee708189bc3d9dff647b7671d03750007223639db16146bd7382bfb7934 | https://dl.google.com/dl/android/maven2/androidx/databinding/databinding-common/3.6.0/databinding-common-3.6.0.jar
8d22885c700e913c8d17a373b96bbb05bc6d6a1c2848b0c57928e2de325bf158 | https://dl.google.com/dl/android/maven2/androidx/databinding/databinding-common/3.6.0/databinding-common-3.6.0.pom
bf2b0ed68625a159254198aeca04f4fe6a5b99638500c88b2d59b7ecd42b6f67 | https://dl.google.com/dl/android/maven2/androidx/databinding/databinding-compiler-common/3.6.0/databinding-compiler-common-3.6.0.jar
b450ad9617683054753abf126d3ebf2b2d99a3a4975355cdfc2cf31cef7ace67 | https://dl.google.com/dl/android/maven2/androidx/databinding/databinding-compiler-common/3.6.0/databinding-compiler-common-3.6.0.pom
10e1f9691dc9485d4c122d16b8ebb2c062a7675c983055bb28cec2496026e658 | https://dl.google.com/dl/android/maven2/com/android/databinding/baseLibrary/3.6.0/baseLibrary-3.6.0.jar
099461a4afeb91d9852e4f6a69959403c328286840d991a001a068afc243bac6 | https://dl.google.com/dl/android/maven2/com/android/databinding/baseLibrary/3.6.0/baseLibrary-3.6.0.pom
a0c36940b7351c2673bf3c96b6774017db4f1e8342ee063cafc3533cecd22707 | https://dl.google.com/dl/android/maven2/com/android/signflinger/3.6.0/signflinger-3.6.0.jar
a8f9f10afa0b381b5e64eafafbd09015775d9934eea475ccaf3320431b4b2a50 | https://dl.google.com/dl/android/maven2/com/android/signflinger/3.6.0/signflinger-3.6.0.pom
271ecbc906cda8dcd9e655ba0473129c3408a4189c806f616c378e6fd18fb3b7 | https://dl.google.com/dl/android/maven2/com/android/support/animated-vector-drawable/28.0.0/animated-vector-drawable-28.0.0.aar
d4783f9cce5b193cb59486fa9fd9f06e828fe4d2d9a5744fab372b9a4a95ecca | https://dl.google.com/dl/android/maven2/com/android/support/animated-vector-drawable/28.0.0/animated-vector-drawable-28.0.0.pom
a3a8e5230359746ed91801579b5fbe4668e3b1c4e6a14c7d67c8f58cb0311752 | https://dl.google.com/dl/android/maven2/com/android/support/appcompat-v7/28.0.0/appcompat-v7-28.0.0.aar
d9f2abe237eab1b651694c0d292dea9ec5b341ae70bfaafffbbb5d46b78c5e17 | https://dl.google.com/dl/android/maven2/com/android/support/appcompat-v7/28.0.0/appcompat-v7-28.0.0.pom
115bde87721f7334579b0c735f60dd7c98af1bb7f34010c5b0553b95dc351aa2 | https://dl.google.com/dl/android/maven2/com/android/support/asynclayoutinflater/28.0.0/asynclayoutinflater-28.0.0.aar
790f1d0ca7c1a65d5afb40baf5b5423fa3163f6f90a47f3193ae0c8bb11c6e78 | https://dl.google.com/dl/android/maven2/com/android/support/asynclayoutinflater/28.0.0/asynclayoutinflater-28.0.0.pom
93c258c8a09f531a267653829742c0f8f6da0e348b11cb8655b0855628f2d4f0 | https://dl.google.com/dl/android/maven2/com/android/support/collections/28.0.0/collections-28.0.0.jar
f6c4146b8b2029e52971402d1c29ed59d2a98b4fab33ef8e6f44233ac0cf27ba | https://dl.google.com/dl/android/maven2/com/android/support/collections/28.0.0/collections-28.0.0.pom
9dfacd80423dc979048fbaed83c0ee543c46259feb2417377e79a656888d3892 | https://dl.google.com/dl/android/maven2/com/android/support/coordinatorlayout/28.0.0/coordinatorlayout-28.0.0.aar
cb83674d682f81daf7b2d43e965a18b83ef4f5bb02a69d14bb20175753361a4f | https://dl.google.com/dl/android/maven2/com/android/support/coordinatorlayout/28.0.0/coordinatorlayout-28.0.0.pom
87feffe742b8d62ca8a9833abe564838bf6a672e31c7ad1306ec4006adf90d21 | https://dl.google.com/dl/android/maven2/com/android/support/cursoradapter/28.0.0/cursoradapter-28.0.0.aar
5727103ce28357bce8f74655c0994508d55d060f9ec6dafba0103e7fe55f275b | https://dl.google.com/dl/android/maven2/com/android/support/cursoradapter/28.0.0/cursoradapter-28.0.0.pom
98db03845f994e08248bf701c1ff0ccaa12e70f94251ec9272900f0f694e072b | https://dl.google.com/dl/android/maven2/com/android/support/customview/28.0.0/customview-28.0.0.aar
187c2729dfd51ef8db5963598d14da67bad5ceb4ea5252f382044249327010e5 | https://dl.google.com/dl/android/maven2/com/android/support/customview/28.0.0/customview-28.0.0.pom
47cdcd3e9302b7b064923f05487a5c03babbd9bbda4726b71e97791fab5d4779 | https://dl.google.com/dl/android/maven2/com/android/support/documentfile/28.0.0/documentfile-28.0.0.aar
5ffda693e34d152463f8a9a6c00407fb11747a2271c278e082a287abad3f9cba | https://dl.google.com/dl/android/maven2/com/android/support/documentfile/28.0.0/documentfile-28.0.0.pom
8f6809afae4793550c37461c9810e954ae6a23dbb4d23e5333bf18148df1150a | https://dl.google.com/dl/android/maven2/com/android/support/drawerlayout/28.0.0/drawerlayout-28.0.0.aar
424f2d0b4a3ac46e0ad5349192ad0ecdc0bfcb10ed91767a08230cd16a3cfe36 | https://dl.google.com/dl/android/maven2/com/android/support/drawerlayout/28.0.0/drawerlayout-28.0.0.pom
7bc7ee86a0db39a4b51956f3e89842d2bd962118d57d779eb6ed6b34ba0677ea | https://dl.google.com/dl/android/maven2/com/android/support/interpolator/28.0.0/interpolator-28.0.0.aar
296b5f5eaa5cb38f67bca092aaf56bf6d23a13aa07cd81a377f861f52d609f9b | https://dl.google.com/dl/android/maven2/com/android/support/interpolator/28.0.0/interpolator-28.0.0.pom
920b85efd72dc33e915b0f88a883fe73b88483c6df8751a741e17611f2460341 | https://dl.google.com/dl/android/maven2/com/android/support/loader/28.0.0/loader-28.0.0.aar
9a9bad607f4b946d1503fe9b751af156da361e642e86f4fb5355b89b9557e8df | https://dl.google.com/dl/android/maven2/com/android/support/loader/28.0.0/loader-28.0.0.pom
d287c823af5fdde72c099fcfc5f630efe9687af7a914343ae6fd92de32c8a806 | https://dl.google.com/dl/android/maven2/com/android/support/localbroadcastmanager/28.0.0/localbroadcastmanager-28.0.0.aar
351a941335421113dff16b1ff9d4618bbcb093fd1508fc8639f18c5533313091 | https://dl.google.com/dl/android/maven2/com/android/support/localbroadcastmanager/28.0.0/localbroadcastmanager-28.0.0.pom
4be8a812d73e4a80e35b91ceae127def3f0bb9726bf3bc439aa0cc81503f5728 | https://dl.google.com/dl/android/maven2/com/android/support/print/28.0.0/print-28.0.0.aar
e15dd914e64f5cfcbd91aeb1b921fd6ead39c21926e171a4955dd12c849c6e78 | https://dl.google.com/dl/android/maven2/com/android/support/print/28.0.0/print-28.0.0.pom
d1d234f66a1b36a9aee9b94fa6c66f97128c0828078c8e889e9037ec898cd600 | https://dl.google.com/dl/android/maven2/com/android/support/slidingpanelayout/28.0.0/slidingpanelayout-28.0.0.aar
be47ac0d8fd8bdd783071596c5ea271362484752d282fb8c3421d1853ad02619 | https://dl.google.com/dl/android/maven2/com/android/support/slidingpanelayout/28.0.0/slidingpanelayout-28.0.0.pom
5d5b9414f02d3fa0ee7526b8d5ddae0da67c8ecc8c4d63ffa6cf91488a93b927 | https://dl.google.com/dl/android/maven2/com/android/support/support-annotations/28.0.0/support-annotations-28.0.0.jar
a086481e014492fd3a4d5f4459875b8a70a201258f0b225836212ee29df0091a | https://dl.google.com/dl/android/maven2/com/android/support/support-annotations/28.0.0/support-annotations-28.0.0.pom
e17e3b01dbea3f9ea1c86943292f903ca93d2231c6242e456e0b6a9c5817118a | https://dl.google.com/dl/android/maven2/com/android/support/support-compat/28.0.0/support-compat-28.0.0.aar
6b79a06c2282fc0f961cfd826a26ad41ff5c457b0c11d9a6b6a63e51f53d961a | https://dl.google.com/dl/android/maven2/com/android/support/support-compat/28.0.0/support-compat-28.0.0.pom
bbc7f65fc95649464733af373361532ab5f9f3b749c3badaa2bbf27e574b6c6f | https://dl.google.com/dl/android/maven2/com/android/support/support-core-ui/28.0.0/support-core-ui-28.0.0.aar
708ad4a6a48ce625aee395fd0625ae5441fee8f0e25861406603f765e679b544 | https://dl.google.com/dl/android/maven2/com/android/support/support-core-ui/28.0.0/support-core-ui-28.0.0.pom
c81e1e98ca3cb2edae002c69cf35b22aec364b8cb2f1042c97e206eb5790ac41 | https://dl.google.com/dl/android/maven2/com/android/support/support-core-utils/28.0.0/support-core-utils-28.0.0.aar
86a744b8739e8b354d0ecaec35dd943dea9a66f0296a3a9c1eb384fc93a4eaf7 | https://dl.google.com/dl/android/maven2/com/android/support/support-core-utils/28.0.0/support-core-utils-28.0.0.pom
3772fc738ada86824ba1a4b3f197c3dbd67b7ddcfe2c9db1de95ef2e3487a915 | https://dl.google.com/dl/android/maven2/com/android/support/support-fragment/28.0.0/support-fragment-28.0.0.aar
d24bdade5b77b26b82d39beda9fa0f42bcdf61cb5661a3c66ddfde3f77869b07 | https://dl.google.com/dl/android/maven2/com/android/support/support-fragment/28.0.0/support-fragment-28.0.0.pom
f658986d968172bccfed28578471c96050780fe5e133861e4d331069cc373f4d | https://dl.google.com/dl/android/maven2/com/android/support/support-vector-drawable/28.0.0/support-vector-drawable-28.0.0.aar
1e54416142b0f1274db09bbea1808f5cf9311c895bb0d84adaa18a7b5132aadc | https://dl.google.com/dl/android/maven2/com/android/support/support-vector-drawable/28.0.0/support-vector-drawable-28.0.0.pom
a3b41f7f6730866b49865e86e49f988d4858699765f534300fb2ff5f9325e712 | https://dl.google.com/dl/android/maven2/com/android/support/swiperefreshlayout/28.0.0/swiperefreshlayout-28.0.0.aar
c2e08d32b75d98a844f20be02510c830f7e5b53f64907af2270a898d59dc872f | https://dl.google.com/dl/android/maven2/com/android/support/swiperefreshlayout/28.0.0/swiperefreshlayout-28.0.0.pom
60eb1cb08f71b65c3f6123135e03ebeb5930b5e126e1e5b2ac91b386908c9d02 | https://dl.google.com/dl/android/maven2/com/android/support/versionedparcelable/28.0.0/versionedparcelable-28.0.0.aar
e7d6f726e702b418998fab6284df2f509f5acdf9203ced37c8d1274f9e38447b | https://dl.google.com/dl/android/maven2/com/android/support/versionedparcelable/28.0.0/versionedparcelable-28.0.0.pom
013c4c53058758ec104dbae970be58159f75dfe342ba8b937d15ff5282e35ffc | https://dl.google.com/dl/android/maven2/com/android/support/viewpager/28.0.0/viewpager-28.0.0.aar
080bba6573f6a4a9b2af443bf4ecb2a7ac4302a027274cc9bf9fdd51f409430e | https://dl.google.com/dl/android/maven2/com/android/support/viewpager/28.0.0/viewpager-28.0.0.pom
f7a0143fa51920ea9289ebfc11349fcb4bc70cebd1f6b746de2998fa7fdf5f2d | https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/crash/26.6.0/crash-26.6.0.jar
b98df4993e7f76236fd28b6b73f62b2349f0399e780d50c8743e708c08f9b073 | https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/crash/26.6.0/crash-26.6.0.pom
fe69b530190d1be5d375b4d27c1831f1921ee023bcc2a4779a692a11b883a5d1 | https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/protos/26.6.0/protos-26.6.0.jar
65965684318c80df0f40e90f9a50800d8c57e9b3eda48096f9990b769f93524b | https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/protos/26.6.0/protos-26.6.0.pom
d897e7af0116944be7c4b917831527155fa3723f1fb77f45ba84537c9923cd99 | https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/shared/26.6.0/shared-26.6.0.jar
ade7c62a6a19e93635ad78bb8f4bac080e32a1ecc7423c146522e013472f672f | https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/shared/26.6.0/shared-26.6.0.pom
29720b801195d7809a8e91da9dbaee2305320f28777c7e9649da6b2392dc48a7 | https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/tracker/26.6.0/tracker-26.6.0.jar
9835e19c8b5ba3660f1778d27a82f03c4ac944cb3d22f14881b372ae251246e2 | https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/tracker/26.6.0/tracker-26.6.0.pom
fb242380c243cd2069fd992b2803cca4a9e4366157cd327984eab75eb9e9a9e7 | https://dl.google.com/dl/android/maven2/com/android/tools/annotations/26.6.0/annotations-26.6.0.jar
827af30b20f5c227cba52f365d685e92ff08c45e2d4f37fca57eb5f951006dd2 | https://dl.google.com/dl/android/maven2/com/android/tools/annotations/26.6.0/annotations-26.6.0.pom
fac0435e08898f89eeeb9ca236bea707155ff816c12205ced285ad53604133ca | https://dl.google.com/dl/android/maven2/com/android/tools/build/aapt2-proto/0.4.0/aapt2-proto-0.4.0.jar
a24bdd4e8e374fdcd8cef8d77ea723f147ccd0f25dc6de4fbe290039be904339 | https://dl.google.com/dl/android/maven2/com/android/tools/build/aapt2-proto/0.4.0/aapt2-proto-0.4.0.pom
f74465e394c73d71f0f9053f3ebc90999d06bea3ad7c1fa3576b6a3a088d0db3 | https://dl.google.com/dl/android/maven2/com/android/tools/build/aapt2/3.6.0-6040484/aapt2-3.6.0-6040484-linux.jar
c616e4a81a19bf74fb98f072383b316da8be882c3e9efce7fee82b802da5ccd5 | https://dl.google.com/dl/android/maven2/com/android/tools/build/aapt2/3.6.0-6040484/aapt2-3.6.0-6040484.pom
1fc041276d0e090b6ac99f26e8ab59d1c2257293bc88ee49ff074e69345bc665 | https://dl.google.com/dl/android/maven2/com/android/tools/build/apksig/3.6.0/apksig-3.6.0.jar
2cf2d4a8fbe06e60026b6f2f90a7d6c73b7d3f66abbb984e6a1740b85776a028 | https://dl.google.com/dl/android/maven2/com/android/tools/build/apksig/3.6.0/apksig-3.6.0.pom
8126c2fef74b0ebd1d6e647c3a84ef4f3e9a60231952abc74e4a097a6449374a | https://dl.google.com/dl/android/maven2/com/android/tools/build/apkzlib/3.6.0/apkzlib-3.6.0.jar
055661a9e3089fb7154e0f358281a7406b1da4bc6d61dea1a0e19231239f36cf | https://dl.google.com/dl/android/maven2/com/android/tools/build/apkzlib/3.6.0/apkzlib-3.6.0.pom
e18b976ea7620026259eeae4dc0378bd2ff5388dd91b8201113b2089b281ae3f | https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-model/3.6.0/builder-model-3.6.0.jar
369428537e6613f4e229cbd70360aeff18a628c41566a7dd5b3d143808eef41a | https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-model/3.6.0/builder-model-3.6.0.pom
ac90b88ce12f9d0ae0f9845ff2ad9bdf65aa07d3e7b4b0515794cffe4b603fe8 | https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-test-api/3.6.0/builder-test-api-3.6.0.jar
af0c92edfbc6549bebb636e82eb8a851c85e12bc4bcdfa2b81161bbb9e994050 | https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-test-api/3.6.0/builder-test-api-3.6.0.pom
74cc34c112d8586cedb0f94a9728b0402492436e10c6493ee6da60308be0b262 | https://dl.google.com/dl/android/maven2/com/android/tools/build/builder/3.6.0/builder-3.6.0.jar
f4485a00d7a5c792cb5f2a8c5c8446bada583570f25182dbf84d700e30441386 | https://dl.google.com/dl/android/maven2/com/android/tools/build/builder/3.6.0/builder-3.6.0.pom
20f2e347e9b4ccd9cdcdc2f6e1956ba3cc1641991fbbadc1f86ca60dd6ca64e1 | https://dl.google.com/dl/android/maven2/com/android/tools/build/bundletool/0.10.3/bundletool-0.10.3.jar
ad9c1614680f29b5c39018c32e2b44d3adfc52d667e7bf29ca64eb2feb697034 | https://dl.google.com/dl/android/maven2/com/android/tools/build/bundletool/0.10.3/bundletool-0.10.3.pom
841cfc9f6224c2d12e761ac3a305b268e0ee735b0ddd7e70cfebbf5a2df9cfa6 | https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle-api/3.6.0/gradle-api-3.6.0.jar
69d6a67a8f84d03ba331dc9e228bd477c903f3643bde330c8c3a1cc72e8e1b7a | https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle-api/3.6.0/gradle-api-3.6.0.pom
bdd59f532634d4fde2b3a6864bdc61058d94a62a5310f431f75b6f571d00d196 | https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/3.6.0/gradle-3.6.0.jar
ee16c99fea79a677092828264e01961816cef6ef4fa1f5702db6a58093dc0157 | https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/3.6.0/gradle-3.6.0.pom
0930bb58d94e09c61161576ca38853b3dba4ac9320fcf323f9b31bc58a18afda | https://dl.google.com/dl/android/maven2/com/android/tools/build/jetifier/jetifier-core/1.0.0-beta08/jetifier-core-1.0.0-beta08.jar
c39f0d195566b2ca9e1c954a665a553dc60320d4022acad82fd56a31a6d395d5 | https://dl.google.com/dl/android/maven2/com/android/tools/build/jetifier/jetifier-core/1.0.0-beta08/jetifier-core-1.0.0-beta08.pom
689e5637b0b61b460f447064ff62ed4267203a26a70cf071fa34d7c3faba5366 | https://dl.google.com/dl/android/maven2/com/android/tools/build/jetifier/jetifier-processor/1.0.0-beta08/jetifier-processor-1.0.0-beta08.jar
be08f1215cd2bb5cbd22b1146ea92e0f14558fafc1603cbef7553b3a6677984c | https://dl.google.com/dl/android/maven2/com/android/tools/build/jetifier/jetifier-processor/1.0.0-beta08/jetifier-processor-1.0.0-beta08.pom
9b2709e8f64978960a701675fa8d6e7dc5109ec6ddf1bb301c9ebf88545c9bc6 | https://dl.google.com/dl/android/maven2/com/android/tools/build/manifest-merger/26.6.0/manifest-merger-26.6.0.jar
fc1c1056089f4418ac0de5aef2c797a38a39ce8cd70cacb95269b834625fcde8 | https://dl.google.com/dl/android/maven2/com/android/tools/build/manifest-merger/26.6.0/manifest-merger-26.6.0.pom
f83adfad2f11074d97e6b0706872a60ec54c6ff42d6554bec1c900d9077825d5 | https://dl.google.com/dl/android/maven2/com/android/tools/common/26.6.0/common-26.6.0.jar
4f9c30f02a6ee14fe175c1dd53274fd615d8e11dc22fb9912adcb58a69bb0bca | https://dl.google.com/dl/android/maven2/com/android/tools/common/26.6.0/common-26.6.0.pom
62eab1a996349a50e1e2a38f9277ebcebd2e10b1614b15f0ee8be1e1aedb8503 | https://dl.google.com/dl/android/maven2/com/android/tools/ddms/ddmlib/26.6.0/ddmlib-26.6.0.jar
764cf4d884e271972c3a1ea6fbc27fa6fcb7d4eb38787fbb40fa91f9f57a1add | https://dl.google.com/dl/android/maven2/com/android/tools/ddms/ddmlib/26.6.0/ddmlib-26.6.0.pom
837f7e464ab3bc491637869950ba56a7cc61977590d2d8ea85801cef3de253bb | https://dl.google.com/dl/android/maven2/com/android/tools/dvlib/26.6.0/dvlib-26.6.0.jar
b19445e91383f59fb54c75e053d389a447eeac6c606b98420fcd74e044c0d95b | https://dl.google.com/dl/android/maven2/com/android/tools/dvlib/26.6.0/dvlib-26.6.0.pom
452a2589b6ba40db238cff741fb0f01de83bb9e40b5a58a6f597473abb35900f | https://dl.google.com/dl/android/maven2/com/android/tools/external/com-intellij/intellij-core/26.6.0/intellij-core-26.6.0.jar
c84395f45a7d7e87f2f484e6e8180860cc92e464d2f344a90b8d2202520c99fe | https://dl.google.com/dl/android/maven2/com/android/tools/external/com-intellij/intellij-core/26.6.0/intellij-core-26.6.0.pom
2c13673bbd2f88c0cdd1df45a4ee63d0e0322c39796103c7abf175fcafe9ba35 | https://dl.google.com/dl/android/maven2/com/android/tools/external/com-intellij/kotlin-compiler/26.6.0/kotlin-compiler-26.6.0.jar
712c98251cf99c8d47ae32968fc3a46b0f1e376c744bc2409a28a0c122ba9c17 | https://dl.google.com/dl/android/maven2/com/android/tools/external/com-intellij/kotlin-compiler/26.6.0/kotlin-compiler-26.6.0.pom
09768c6b91a9cbd615074faf903b8010870f3b64a46a710718eecfce0edb21bf | https://dl.google.com/dl/android/maven2/com/android/tools/external/org-jetbrains/uast/26.6.0/uast-26.6.0.jar
3680ff0f4ee339b0e05865f4057a2d2321b3adaf4bcddeb732314fa7f3fb2bc7 | https://dl.google.com/dl/android/maven2/com/android/tools/external/org-jetbrains/uast/26.6.0/uast-26.6.0.pom
951e8a3832d8f8cb7c10a41c6bd45c16a7a7ae7cc72958ac734f9db0650f61f9 | https://dl.google.com/dl/android/maven2/com/android/tools/layoutlib/layoutlib-api/26.6.0/layoutlib-api-26.6.0.jar
476d3579571a4588f8187024f0043b043917a9b102c2c9f1f8fd6fc0085ab7df | https://dl.google.com/dl/android/maven2/com/android/tools/layoutlib/layoutlib-api/26.6.0/layoutlib-api-26.6.0.pom
b5e1235b181a5a68a14de7adc88997c66cda26036895fc771e87aca63267f2a4 | https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint-api/26.6.0/lint-api-26.6.0.jar
54ab64c262cd2762fb2a2c4aead50a23c3ab500cb0f285864b4c7789a2898df5 | https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint-api/26.6.0/lint-api-26.6.0.pom
941a2cd8c4b88b02abad9e7fc8219a65642ec4222f531bc0dbb69ae2b4f97147 | https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint-checks/26.6.0/lint-checks-26.6.0.jar
12a8ff3487f7d014492354942d4e88b20925ae6b6679ddf4d426131936e51741 | https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint-checks/26.6.0/lint-checks-26.6.0.pom
f661cca9e27b7029cc074b2b7167d1a6882abeb5a9f55efb8005a05e5ef6e11f | https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint-gradle-api/26.6.0/lint-gradle-api-26.6.0.jar
fe047cd786c3d1d32a92b2afe45d6c1ad8fefc214216136ffa0de491bb1cd51b | https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint-gradle-api/26.6.0/lint-gradle-api-26.6.0.pom
9298f4493601af4ba0ccd8f0623ec5cdb7c604c2fea59c3ddf1a82dab824b4c4 | https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint-gradle/26.6.0/lint-gradle-26.6.0.jar
40d80c18a03c236c1ed50dbbb792266b7348b280fcebfce5bf3e41a7f929ecb9 | https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint-gradle/26.6.0/lint-gradle-26.6.0.pom
1efa62b21a76ac2ec98c213937a846dab30f95082fcca806605b0215f9bba6d6 | https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint/26.6.0/lint-26.6.0.jar
235bd153831ba5180c3487ffb9d20364cd402b72aa38429dd87bdb6cdb4a2227 | https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint/26.6.0/lint-26.6.0.pom
da6c7429828e8149702d43b01bb32a57cf9687db6f407552585ba5f26bdf650b | https://dl.google.com/dl/android/maven2/com/android/tools/repository/26.6.0/repository-26.6.0.jar
d583cc98e2215aa1d558b577435696c5d279674d48922e7095fc4f1dda0f5137 | https://dl.google.com/dl/android/maven2/com/android/tools/repository/26.6.0/repository-26.6.0.pom
2bdd20936544902649d85d5db4a538cca888bc9b079ca49886476f7eea270dbc | https://dl.google.com/dl/android/maven2/com/android/tools/sdk-common/26.6.0/sdk-common-26.6.0.jar
353c976f0c5d38f9dc64f571e1ca0a2c57ef0b3dbe76f5bbe062dc396fe7c8a3 | https://dl.google.com/dl/android/maven2/com/android/tools/sdk-common/26.6.0/sdk-common-26.6.0.pom
8dae7e1f611f12c13e660e5245ade4311bb111976c191eacf6ae907a66a3e37d | https://dl.google.com/dl/android/maven2/com/android/tools/sdklib/26.6.0/sdklib-26.6.0.jar
709acf0644fa2d6ea5ff226b902f49b5503dd76a13b2637b5e9216342987e50d | https://dl.google.com/dl/android/maven2/com/android/tools/sdklib/26.6.0/sdklib-26.6.0.pom
3b9d663a8c1fc4fdc812d729961532fb943fd30e5c9e276121f59cdf6a68e665 | https://dl.google.com/dl/android/maven2/com/android/zipflinger/3.6.0/zipflinger-3.6.0.jar
3b46e78152954f6bde5a6d6c219508a8c1229f858e685c156314f1f82e76e1ce | https://dl.google.com/dl/android/maven2/com/android/zipflinger/3.6.0/zipflinger-3.6.0.pom
ec3a75bebddbf19ff56a281cf5d1ad146169dcaa0e69d7b14f4aaba2e7775f34 | https://jcenter.bintray.com/net/freehaven/tor/control/jtorctl/0.2/jtorctl-0.2.jar
3369726ca2b0e3736c741ff3c22e06f707a1007ff20ccc5b5ba5d0d9a01ead30 | https://jcenter.bintray.com/net/freehaven/tor/control/jtorctl/0.2/jtorctl-0.2.pom
1917871c8deb468307a584680c87a44572f5a8b0b98c6d397fc0f5f86596dbe7 | https://jcenter.bintray.com/org/jetbrains/trove4j/trove4j/20160824/trove4j-20160824.jar
5c415a9d8585200de4be1947e15291cc79f599b06249375f5c9ea22d4b2d090f | https://jcenter.bintray.com/org/jetbrains/trove4j/trove4j/20160824/trove4j-20160824.pom
5a12ac3f190fc2cfab73435d859511220b13eb38f8784a530d06395969cf8c59 | https://raw.githubusercontent.com/guardianproject/gpmaven/master/org/torproject/tor-android-binary/0.3.5.8-rc-v2/tor-android-binary-0.3.5.8-rc-v2.aar
177603e3dce43e843799fe0284f8afe8121bb0cdbcdd34cd06bc09f7bd3e6c6f | https://raw.githubusercontent.com/guardianproject/gpmaven/master/org/torproject/tor-android-binary/0.3.5.8-rc-v2/tor-android-binary-0.3.5.8-rc-v2.pom
e8b4151ae1679f1abe7a14ee371ac9b3c651ae7b63290d1f586bdd0f78face9a | https://repo.maven.apache.org/maven2/com/android/tools/build/transform-api/2.0.0-deprecated-use-gradle-api/transform-api-2.0.0-deprecated-use-gradle-api.jar
d49d179f707d3f3a00b2a7d36136b54aa8d44fa22770703cd82fe52fb39e22eb | https://repo.maven.apache.org/maven2/com/android/tools/build/transform-api/2.0.0-deprecated-use-gradle-api/transform-api-2.0.0-deprecated-use-gradle-api.pom
05f740c6648165db00cf618dd56c200c4725e358e6d54f5853e0bec15734ea0a | https://repo.maven.apache.org/maven2/com/google/auto/auto-parent/6/auto-parent-6.pom
b48b04ddba40e8ac33bf036f06fc43995fc5084bd94bdaace807ce27d3bea3fb | https://repo.maven.apache.org/maven2/com/google/auto/value/auto-value-annotations/1.6.2/auto-value-annotations-1.6.2.jar
1c76cd462fc96e7aa96dc70ce82f0d54063d6df16db35c9c7d9cc0d1a99d3fff | https://repo.maven.apache.org/maven2/com/google/auto/value/auto-value-annotations/1.6.2/auto-value-annotations-1.6.2.pom
27b640c82179f5cff62009c0b72033d9bc60f60e9902a66802274b7fe37fc81c | https://repo.maven.apache.org/maven2/com/google/auto/value/auto-value-parent/1.6.2/auto-value-parent-1.6.2.pom
feab9191311c3d7aeef2b66d6064afc80d3d1d52d980fb07ae43c78c987ba93a | https://repo.maven.apache.org/maven2/com/google/code/findbugs/jsr305/1.3.9/jsr305-1.3.9.pom
766ad2a0783f2687962c8ad74ceecc38a28b9f72a2d085ee438b7813e928d0c7 | https://repo.maven.apache.org/maven2/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar
19889dbdf1b254b2601a5ee645b8147a974644882297684c798afe5d63d78dfe | https://repo.maven.apache.org/maven2/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.pom
8f1fec72b91a71ea39ec39f5f778c4d1124b6b097c6d55b3a50b554a52237b27 | https://repo.maven.apache.org/maven2/com/google/code/gson/gson-parent/2.8.5/gson-parent-2.8.5.pom
233a0149fc365c9f6edbd683cfe266b19bdc773be98eabdaf6b3c924b48e7d81 | https://repo.maven.apache.org/maven2/com/google/code/gson/gson/2.8.5/gson-2.8.5.jar
b8308557a7fccc92d9fe7c8cd0599258b361285d2ecde7689eda98843255a092 | https://repo.maven.apache.org/maven2/com/google/code/gson/gson/2.8.5/gson-2.8.5.pom
6ebd22ca1b9d8ec06d41de8d64e0596981d9607b42035f9ed374f9de271a481a | https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar
5e0258ea1ba4e51a133742680bc22448f7ab214be4073e8619f645ef1be42dd5 | https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.pom
10a5949aa0f95c8de4fd47edfe20534d2acefd8c224f8afea1f607e112816120 | https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_annotations/2.3.1/error_prone_annotations-2.3.1.jar
3edce6b711ba368efe16b9b7aacb0214fbd648414cb9b965953a2e7ed89a819a | https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_annotations/2.3.1/error_prone_annotations-2.3.1.pom
c460902ddf5ece68832c6b271ce52a0928b05cf3a6ac81a8f548c73cbd541138 | https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_parent/2.2.0/error_prone_parent-2.2.0.pom
767525d9a81129cd081968382980336327be4162b1e2251a182911daa733c123 | https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_parent/2.3.1/error_prone_parent-2.3.1.pom
cd6db17a11a31ede794ccbd1df0e4d9750f640234731f21cff885a9997277e81 | https://repo.maven.apache.org/maven2/com/google/google/1/google-1.pom
a171ee4c734dd2da837e4b16be9df4661afab72a41adaf31eb84dfdaf936ca26 | https://repo.maven.apache.org/maven2/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar
e96042ce78fecba0da2be964522947c87b40a291b5fd3cd672a434924103c4b9 | https://repo.maven.apache.org/maven2/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.pom
f8698ab46ca996ce889c1afc8ca4f25eb8ac6b034dc898d4583742360016cc04 | https://repo.maven.apache.org/maven2/com/google/guava/guava-parent/26.0-android/guava-parent-26.0-android.pom
d3610165c6de2b4d8d6418487717b63c52b5a39c5e35a553e24873ecb60e0628 | https://repo.maven.apache.org/maven2/com/google/guava/guava-parent/27.1-jre/guava-parent-27.1-jre.pom
4a5aa70cc968a4d137e599ad37553e5cfeed2265e8c193476d7119036c536fe7 | https://repo.maven.apache.org/maven2/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar
bd99d75006131ae25c9860a1d63e84e36371f112fdb0c2fe3d5d6ab38e9eb271 | https://repo.maven.apache.org/maven2/com/google/guava/guava/27.1-jre/guava-27.1-jre.pom
b372a037d4230aa57fbeffdef30fd6123f9c0c2db85d0aced00c91b974f33f99 | https://repo.maven.apache.org/maven2/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar
18d4b1db26153d4e55079ce1f76bb1fe05cdb862ef9954a88cbcc4ff38b8679b | https://repo.maven.apache.org/maven2/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.pom
2994a7eb78f2710bd3d3bfb639b2c94e219cedac0d4d084d516e78c16dddecf6 | https://repo.maven.apache.org/maven2/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar
f0c98c571e93a7cb4dd18df0fa308f0963e7a0620ac2d4244e61e709d03ad6be | https://repo.maven.apache.org/maven2/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.pom
c71555751e57e0ef912870e8ac9625ae782502a6a5b9c19ccf83b2a97d8b26bd | https://repo.maven.apache.org/maven2/com/google/jimfs/jimfs-parent/1.1/jimfs-parent-1.1.pom
c4828e28d7c0a930af9387510b3bada7daa5c04d7c25a75c7b8b081f1c257ddd | https://repo.maven.apache.org/maven2/com/google/jimfs/jimfs/1.1/jimfs-1.1.jar
efa86e5cd922f17b472fdfcae57234d8d4ac3e148b6250737dfce454af7a7a44 | https://repo.maven.apache.org/maven2/com/google/jimfs/jimfs/1.1/jimfs-1.1.pom
4189e0be5ab15cf2330f70b24fbdc75ca37514f188388fce8580ce16a9a68052 | https://repo.maven.apache.org/maven2/com/google/protobuf/protobuf-java-util/3.4.0/protobuf-java-util-3.4.0.jar
89c43073e7eaa0eaba72a4a36ae1b6bfdfe5d81bb9d0e156aee05e4a72de3cb8 | https://repo.maven.apache.org/maven2/com/google/protobuf/protobuf-java-util/3.4.0/protobuf-java-util-3.4.0.pom
dce7e66b32456a1b1198da0caff3a8acb71548658391e798c79369241e6490a4 | https://repo.maven.apache.org/maven2/com/google/protobuf/protobuf-java/3.4.0/protobuf-java-3.4.0.jar
83f17ba86c5fa1a15a3a3c8030d4ce42ef21c1d39b65db6cc004a8eeb2c59406 | https://repo.maven.apache.org/maven2/com/google/protobuf/protobuf-java/3.4.0/protobuf-java-3.4.0.pom
24909c552842c0eb7a4c769d631a43cbef5a9a10c1640f2bdbd1ea149c573a47 | https://repo.maven.apache.org/maven2/com/google/protobuf/protobuf-parent/3.4.0/protobuf-parent-3.4.0.pom
2d9484f4c649f708f47f9a479465fc729770ee65617dca3011836602264f6439 | https://repo.maven.apache.org/maven2/com/googlecode/json-simple/json-simple/1.1/json-simple-1.1.jar
47a89be0fa0fedd476db5fd2c83487654d2a119c391f83a142be876667cf7dab | https://repo.maven.apache.org/maven2/com/googlecode/json-simple/json-simple/1.1/json-simple-1.1.pom
757bfe906193b8b651e79dc26cd67d6b55d0770a2cdfb0381591504f779d4a76 | https://repo.maven.apache.org/maven2/com/googlecode/juniversalchardet/juniversalchardet/1.0.3/juniversalchardet-1.0.3.jar
7846399b35c7cd642a9b3a000c3e2d62d04eb37a4547b6933cc8b18bcc2f086b | https://repo.maven.apache.org/maven2/com/googlecode/juniversalchardet/juniversalchardet/1.0.3/juniversalchardet-1.0.3.pom
20ef4b82e43ff7c652281a21313cf3b941092467add3fa73509c26f6969efdab | https://repo.maven.apache.org/maven2/com/squareup/javapoet/1.10.0/javapoet-1.10.0.jar
1690340a222279f2cbadf373e88826fa20f7f3cc3ec0252f36818fed32701ab1 | https://repo.maven.apache.org/maven2/com/squareup/javapoet/1.10.0/javapoet-1.10.0.pom
fcfb09fb0ea0aa97d3cfe7ea792398081348e468f126b3603cb3803f240197f0 | https://repo.maven.apache.org/maven2/com/squareup/javawriter/2.5.0/javawriter-2.5.0.jar
e1abd7f1116cf5e0c59947693e2189208ec94296b2a3394c959e3511d399a7b0 | https://repo.maven.apache.org/maven2/com/squareup/javawriter/2.5.0/javawriter-2.5.0.pom
1d8518e3ac7532a104e4f7be77def37c982e530723c6bdb3d67708cce2b0c2c4 | https://repo.maven.apache.org/maven2/com/sun/activation/all/1.2.0/all-1.2.0.pom
993302b16cd7056f21e779cc577d175a810bb4900ef73cd8fbf2b50f928ba9ce | https://repo.maven.apache.org/maven2/com/sun/activation/javax.activation/1.2.0/javax.activation-1.2.0.jar
f879b6e945854c6900b0dbee1c8384d7ab3de7e157fd7ac84937405c416d2a5e | https://repo.maven.apache.org/maven2/com/sun/activation/javax.activation/1.2.0/javax.activation-1.2.0.pom
6443e10ba2e259fb821d9b6becf10db5316285fc30c53cec9d7b19a3877e7fdf | https://repo.maven.apache.org/maven2/com/sun/istack/istack-commons-runtime/3.0.7/istack-commons-runtime-3.0.7.jar
6d704e450a816a45bce806ba22c22fe83d8e8dcf7a71517603de630a1726809f | https://repo.maven.apache.org/maven2/com/sun/istack/istack-commons-runtime/3.0.7/istack-commons-runtime-3.0.7.pom
6f83d3c85fdca9ef24010cb2f652aab1a508bff6331c087b60d0301782b78c6f | https://repo.maven.apache.org/maven2/com/sun/istack/istack-commons/3.0.7/istack-commons-3.0.7.pom
c2204f54b43593808c9af6502865ee71679823156dabdef341e71d35662c7aa0 | https://repo.maven.apache.org/maven2/com/sun/xml/bind/jaxb-bom-ext/2.3.1/jaxb-bom-ext-2.3.1.pom
f699ef37ec7966e284742dfca83075221179041a9a49aef7991280192604462d | https://repo.maven.apache.org/maven2/com/sun/xml/bind/mvn/jaxb-parent/2.3.1/jaxb-parent-2.3.1.pom
b56383eb4d43498b145d379e2a93d5fcdcd8ff9291f89b58b82cb91658dbf14c | https://repo.maven.apache.org/maven2/com/sun/xml/bind/mvn/jaxb-runtime-parent/2.3.1/jaxb-runtime-parent-2.3.1.pom
7a8473e935504841c606686d84e9c017a739ac2c144fde687aa003a7dd44de7f | https://repo.maven.apache.org/maven2/com/sun/xml/bind/mvn/jaxb-txw-parent/2.3.1/jaxb-txw-parent-2.3.1.pom
785861db11ca1bd0d1956682b974ad73eb19cd3e01a4b3fa82d62eca97210aec | https://repo.maven.apache.org/maven2/com/sun/xml/fastinfoset/FastInfoset/1.2.15/FastInfoset-1.2.15.jar
bbc796ab84a6778a751c2eff1136078abd2b4d35b5047062804f3582ef3c42c8 | https://repo.maven.apache.org/maven2/com/sun/xml/fastinfoset/FastInfoset/1.2.15/FastInfoset-1.2.15.pom
cfb8cdad4c0dd05ed8cacbe146bf1718764403947b9de8348e1bfd42f62ea73e | https://repo.maven.apache.org/maven2/com/sun/xml/fastinfoset/fastinfoset-project/1.2.15/fastinfoset-project-1.2.15.pom
4241dfa94e711d435f29a4604a3e2de5c4aa3c165e23bd066be6fc1fc4309569 | https://repo.maven.apache.org/maven2/commons-codec/commons-codec/1.10/commons-codec-1.10.jar
bdb8db7012d112a6e3ea8fdb7c510b300d99eff0819d27dddba9c43397ea4cfb | https://repo.maven.apache.org/maven2/commons-codec/commons-codec/1.10/commons-codec-1.10.pom
cc6a41dc3eaacc9e440a6bd0d2890b20d36b4ee408fe2d67122f328bb6e01581 | https://repo.maven.apache.org/maven2/commons-io/commons-io/2.4/commons-io-2.4.jar
b2b5dd46cf998fa626eb6f8a1c114f6167c8d392694164e62533e5898e9b31f2 | https://repo.maven.apache.org/maven2/commons-io/commons-io/2.4/commons-io-2.4.pom
daddea1ea0be0f56978ab3006b8ac92834afeefbd9b7e4e6316fca57df0fa636 | https://repo.maven.apache.org/maven2/commons-logging/commons-logging/1.2/commons-logging-1.2.jar
c91ab5aa570d86f6fd07cc158ec6bc2c50080402972ee9179fe24100739fbb20 | https://repo.maven.apache.org/maven2/commons-logging/commons-logging/1.2/commons-logging-1.2.pom
74fa208043740642f7e6eb09faba15965218ad2f50ce3020efb100136e4b591c | https://repo.maven.apache.org/maven2/it/unimi/dsi/fastutil/7.2.0/fastutil-7.2.0.jar
953b116521a73575eee990e3f2c36a892fb088bb2d9a3027c82193cb7a013ef7 | https://repo.maven.apache.org/maven2/it/unimi/dsi/fastutil/7.2.0/fastutil-7.2.0.pom
43fdef0b5b6ceb31b0424b208b930c74ab58fac2ceeb7b3f6fd3aeb8b5ca4393 | https://repo.maven.apache.org/maven2/javax/activation/javax.activation-api/1.2.0/javax.activation-api-1.2.0.jar
da2926f3c8be898643cc10acdec6de0b0351a57fb2735770fa0177b06ade71b9 | https://repo.maven.apache.org/maven2/javax/activation/javax.activation-api/1.2.0/javax.activation-api-1.2.0.pom
91c77044a50c481636c32d916fd89c9118a72195390452c81065080f957de7ff | https://repo.maven.apache.org/maven2/javax/inject/javax.inject/1/javax.inject-1.jar
943e12b100627804638fa285805a0ab788a680266531e650921ebfe4621a8bfa | https://repo.maven.apache.org/maven2/javax/inject/javax.inject/1/javax.inject-1.pom
cd1beaa4560dc4dfdb826b9d809e464db22526dfb54264bae78a6ff7efb08e1f | https://repo.maven.apache.org/maven2/javax/xml/bind/jaxb-api-parent/2.3.1/jaxb-api-parent-2.3.1.pom
88b955a0df57880a26a74708bc34f74dcaf8ebf4e78843a28b50eae945732b06 | https://repo.maven.apache.org/maven2/javax/xml/bind/jaxb-api/2.3.1/jaxb-api-2.3.1.jar
12b20cf922773445c3445c2883cbf671fa982111e9bf9f875020f9313b3814b1 | https://repo.maven.apache.org/maven2/javax/xml/bind/jaxb-api/2.3.1/jaxb-api-2.3.1.pom
281440811268e65d9e266b3cc898297e214e04f09740d0386ceeb4a8923d63bf | https://repo.maven.apache.org/maven2/net/java/jvnet-parent/1/jvnet-parent-1.pom
1af699f8d9ddab67f9a0d202fbd7915eb0362a5a6dfd5ffc54cafa3465c9cb0a | https://repo.maven.apache.org/maven2/net/java/jvnet-parent/5/jvnet-parent-5.pom
26c5856e954b5f864db76f13b86919b59c6eecf9fd930b96baa8884626baf2f5 | https://repo.maven.apache.org/maven2/net/sf/jopt-simple/jopt-simple/4.9/jopt-simple-4.9.jar
7af7e2d8b24b4798f04c2b7da24c9fbd1b7557b4e017c2054481565916079092 | https://repo.maven.apache.org/maven2/net/sf/jopt-simple/jopt-simple/4.9/jopt-simple-4.9.pom
f264dd9f79a1fde10ce5ecc53221eff24be4c9331c830b7d52f2f08a7b633de2 | https://repo.maven.apache.org/maven2/net/sf/kxml/kxml2/2.3.0/kxml2-2.3.0.jar
31ce606f4e9518936299bb0d27c978fa61e185fd1de7c9874fe959a53e34a685 | https://repo.maven.apache.org/maven2/net/sf/kxml/kxml2/2.3.0/kxml2-2.3.0.pom
75bc89695fa66e75374ecda439b802406f0ab1d826dd386eed0a23b1f0a9d264 | https://repo.maven.apache.org/maven2/net/sf/proguard/proguard-base/6.0.3/proguard-base-6.0.3.jar
2a823d79f2675582a988d539466d1b175e939782efbe0f6e61f06cb165ed4907 | https://repo.maven.apache.org/maven2/net/sf/proguard/proguard-base/6.0.3/proguard-base-6.0.3.pom
cc12b1168e521491dd0e687cfebec11a4af874b22af70e10cf2a05b47ca00c8f | https://repo.maven.apache.org/maven2/net/sf/proguard/proguard-gradle/6.0.3/proguard-gradle-6.0.3.jar
5a5c7317d68ce80d1d40c9d8bd4e38814d42d1b16c265146e333634833a35a57 | https://repo.maven.apache.org/maven2/net/sf/proguard/proguard-gradle/6.0.3/proguard-gradle-6.0.3.pom
d87266bfd2312c3b036c4ac709310afa35c448ceb18027c3b87a33d03c6de0a0 | https://repo.maven.apache.org/maven2/net/sf/proguard/proguard-parent/6.0.3/proguard-parent-6.0.3.pom
401877d5e70ad599e9b6cff18434ea0332f637b51f8ec68352646c836f9bb2a4 | https://repo.maven.apache.org/maven2/org/antlr/antlr4-master/4.5.3/antlr4-master-4.5.3.pom
a32de739cfdf515774e696f91aa9697d2e7731e5cb5045ca8a4b657f8b1b4fb4 | https://repo.maven.apache.org/maven2/org/antlr/antlr4/4.5.3/antlr4-4.5.3.jar
8a4e4b32eedaa72976a757e12cf1dfe742725db0b7311bf176dd937ba4236384 | https://repo.maven.apache.org/maven2/org/antlr/antlr4/4.5.3/antlr4-4.5.3.pom
ff513db0361fd41237bef4784968bc15aae478d4ec0a9496f811072ccaf3841d | https://repo.maven.apache.org/maven2/org/apache/apache/13/apache-13.pom
36c2f2f979ac67b450c0cb480e4e9baf6b40f3a681f22ba9692287d1139ad494 | https://repo.maven.apache.org/maven2/org/apache/apache/15/apache-15.pom
9f85ff2fd7d6cb3097aa47fb419ee7f0ebe869109f98aba9f4eca3f49e74a40e | https://repo.maven.apache.org/maven2/org/apache/apache/16/apache-16.pom
7831307285fd475bbc36b20ae38e7882f11c3153b1d5930f852d44eda8f33c17 | https://repo.maven.apache.org/maven2/org/apache/apache/18/apache-18.pom
4946e60a547c8eda69f3bc23c5b6f0dadcf8469ea49b1d1da7de34aecfcf18dd | https://repo.maven.apache.org/maven2/org/apache/apache/9/apache-9.pom
2c1542faf343185b7cab9c3d55c8ae5471d6d095d3887a4adefdbdf2984dc0b6 | https://repo.maven.apache.org/maven2/org/apache/commons/commons-compress/1.12/commons-compress-1.12.jar
b787d574c851505e76212968b9ae1641ea79804aef7f5a2cee2a01cd4055213a | https://repo.maven.apache.org/maven2/org/apache/commons/commons-compress/1.12/commons-compress-1.12.pom
467ae650442e876867379094e7518dfdd67d22c5352ebd39808c84259e9790ba | https://repo.maven.apache.org/maven2/org/apache/commons/commons-parent/25/commons-parent-25.pom
3a2e69d06d641d1f3b293126dc9e2e4ea6563bf8c36c87e0ab6fa4292d04b79c | https://repo.maven.apache.org/maven2/org/apache/commons/commons-parent/34/commons-parent-34.pom
7098a1ab8336ecd4c9dc21cbbcac869f82c66f64b8ac4f7988d41b4fcb44e49a | https://repo.maven.apache.org/maven2/org/apache/commons/commons-parent/35/commons-parent-35.pom
87cd27e1a02a5c3eb6d85059ce98696bb1b44c2b8b650f0567c86df60fa61da7 | https://repo.maven.apache.org/maven2/org/apache/commons/commons-parent/39/commons-parent-39.pom
c03f813195e7a80e3608d0ddd8da80b21696a4c92a6a2298865bf149071551c7 | https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpclient/4.5.6/httpclient-4.5.6.jar
7efc1241e73e7fbb268bfd33242d11ebd3ca07061d7d85f2962dc32a0f0b8855 | https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpclient/4.5.6/httpclient-4.5.6.pom
b042b41f2391edb00d35f7f4e509aed2123648c1d246ce58d0f7b905c9fe1f73 | https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpcomponents-client/4.5.6/httpcomponents-client-4.5.6.pom
61e9427d4be326c307a7f16ba828d1cb3b14713c9b04fc8ba992a58f376c3136 | https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpcomponents-core/4.4.10/httpcomponents-core-4.4.10.pom
caaf967d94afb21753f36082c6086206bd1f48825ff596932cceba72b65d39fa | https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpcomponents-parent/10/httpcomponents-parent-10.pom
78ba1096561957db1b55200a159b648876430342d15d461277e62360da19f6fd | https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpcore/4.4.10/httpcore-4.4.10.jar
c5c12066df2b3b88a89a2c8602b81ea9a61627e976e5129eea1899ebbaea392b | https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpcore/4.4.10/httpcore-4.4.10.pom
0b2b1102c18d3c7e05a77214b9b7501a6f6056174ae5604e0e256776eda7553e | https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpmime/4.5.6/httpmime-4.5.6.jar
dfbfd6ffe2a784ca9817c46365aa7f8a578320b805bde39d6f55a0b09d8aa8ca | https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpmime/4.5.6/httpmime-4.5.6.pom
7043dee4e9e7175e93e0b36f45b1ec1ecb893c5f755667e8b916eb8dd201c6ca | https://repo.maven.apache.org/maven2/org/bouncycastle/bcpkix-jdk15on/1.56/bcpkix-jdk15on-1.56.jar
321668fc474a73140eb9cc73c779f1ebb9f60948aade3beddee082ecefcf0259 | https://repo.maven.apache.org/maven2/org/bouncycastle/bcpkix-jdk15on/1.56/bcpkix-jdk15on-1.56.pom
963e1ee14f808ffb99897d848ddcdb28fa91ddda867eb18d303e82728f878349 | https://repo.maven.apache.org/maven2/org/bouncycastle/bcprov-jdk15on/1.56/bcprov-jdk15on-1.56.jar
8fdc3336e7b01873193ba9c48b87de7d788dc0954d1eb45c322492627a4b5c6e | https://repo.maven.apache.org/maven2/org/bouncycastle/bcprov-jdk15on/1.56/bcprov-jdk15on-1.56.pom
64b02691c8b9d4e7700f8ee2e742dce7ea2c6e81e662b7522c9ee3bf568c040a | https://repo.maven.apache.org/maven2/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar
dc4cd438a36462d013c2338c8e206d102a322a00f33729e8955ee219859c9ede | https://repo.maven.apache.org/maven2/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.pom
51d6c4e71782e85674239189499854359d380fb75e1a703756e3aaa5b98a5af0 | https://repo.maven.apache.org/maven2/org/codehaus/groovy/groovy-all/2.4.15/groovy-all-2.4.15.jar
fc0d535d7bdb7ca90562321c2e8e2a35c377f113c6dd0b2062282e1f4676367a | https://repo.maven.apache.org/maven2/org/codehaus/groovy/groovy-all/2.4.15/groovy-all-2.4.15.pom
92654f493ecfec52082e76354f0ebf87648dc3d5cec2e3c3cdb947c016747a53 | https://repo.maven.apache.org/maven2/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar
e956ab5d2eb48fabae12300d0cd2d3294d4a2a41abc2068c23cb4d60ad76cbe5 | https://repo.maven.apache.org/maven2/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.pom
18a03df16e2a184c582db7b125633c15fb7714027a84c1b532d72933dc08b81f | https://repo.maven.apache.org/maven2/org/codehaus/mojo/animal-sniffer-parent/1.17/animal-sniffer-parent-1.17.pom
fc648dcdc404f8bf66e0583914ecf980176618201227bea114fae85043cb755e | https://repo.maven.apache.org/maven2/org/codehaus/mojo/mojo-parent/40/mojo-parent-40.pom
6cc1266cf306557b4f2d09cbd8cd6e75b5ef0c5773ca4ef763d4f730df947b64 | https://repo.maven.apache.org/maven2/org/glassfish/jaxb/jaxb-bom/2.3.1/jaxb-bom-2.3.1.pom
45fecfa5c8217ce1f3652ab95179790ec8cc0dec0384bca51cbeb94a293d9f2f | https://repo.maven.apache.org/maven2/org/glassfish/jaxb/jaxb-runtime/2.3.1/jaxb-runtime-2.3.1.jar
f8101b86157fbfc01949ffdc7c59ea71ca23b7ece25f6a79061fe01cb750ff00 | https://repo.maven.apache.org/maven2/org/glassfish/jaxb/jaxb-runtime/2.3.1/jaxb-runtime-2.3.1.pom
34975dde1c6920f1a39791142235689bc3cd357e24d05edd8ff93b885bd68d60 | https://repo.maven.apache.org/maven2/org/glassfish/jaxb/txw2/2.3.1/txw2-2.3.1.jar
4714d46cacf702ab2cd478d6048c5d9cc57abdb55f4c07b6b7aa72799e02d36c | https://repo.maven.apache.org/maven2/org/glassfish/jaxb/txw2/2.3.1/txw2-2.3.1.pom
1345f11ba606d15603d6740551a8c21947c0215640770ec67271fe78bea97cf5 | https://repo.maven.apache.org/maven2/org/jdom/jdom2/2.0.6/jdom2-2.0.6.jar
47b23a79fe336b741b82434c6e049d68165256e405e75c10921fd72fa8a65d8d | https://repo.maven.apache.org/maven2/org/jdom/jdom2/2.0.6/jdom2-2.0.6.pom
ace2a10dc8e2d5fd34925ecac03e4988b2c0f851650c94b8cef49ba1bd111478 | https://repo.maven.apache.org/maven2/org/jetbrains/annotations/13.0/annotations-13.0.jar
965aeb2bedff369819bdde1bf7a0b3b89b8247dd69c88b86375d76163bb8c397 | https://repo.maven.apache.org/maven2/org/jetbrains/annotations/13.0/annotations-13.0.pom
143e715c10ff6d65eb5a7695be7b696c6e013702dff103d23ba54760bf93867b | https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-reflect/1.3.61/kotlin-reflect-1.3.61.jar
b2b8add63c5ce9b67571ed469f7c37fd043ee2420206255e96a146018d8e2fa0 | https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-reflect/1.3.61/kotlin-reflect-1.3.61.pom
a2e7f341cf3047b5f00a1917ef777d323cdab2a57377468b8ed62aa31469cf7f | https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.3.61/kotlin-stdlib-common-1.3.61.jar
e22db009bb1a61636d9425635989736db5e3fca494809abf244468dc474cfc04 | https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.3.61/kotlin-stdlib-common-1.3.61.pom
11f4a57e3e7d81f3f152d5dcefe39bd77614b5a94125ff3b11526b0a19ac3989 | https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.3.61/kotlin-stdlib-jdk7-1.3.61.jar
c416080aeabdb9118a08ee78c28e2856038cd85858422a71f7c46bf276f667a7 | https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.3.61/kotlin-stdlib-jdk7-1.3.61.pom
3839ba7deb798375da1807bc469d1cf315db7a6275599f733184374772ec3b21 | https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.3.61/kotlin-stdlib-jdk8-1.3.61.jar
e30187e5720ca640b8e68686f20dd0250dcef0193d56e5569c3c4a61277312b6 | https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.3.61/kotlin-stdlib-jdk8-1.3.61.pom
e51e512619a7e7650a30eb4eb3e9c03e6909c7b5e3c026404e076254c098b932 | https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.3.61/kotlin-stdlib-1.3.61.jar
dbe5babcd8d43e9b08c2845680b53fc1bb3e051c4805802ddd0ed3e8e2c50a84 | https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.3.61/kotlin-stdlib-1.3.61.pom
95b05d9590af4154c6513b9c5dc1fb2e55b539972ba0a9ef28e9a0c01d83ad77 | https://repo.maven.apache.org/maven2/org/jvnet/staxex/stax-ex/1.8/stax-ex-1.8.jar
0a84c20cf71f6a3d21fe226b0d588332fc7ae3e90cb583c60a483317eb9f3644 | https://repo.maven.apache.org/maven2/org/jvnet/staxex/stax-ex/1.8/stax-ex-1.8.pom
e981f8f650c4d900bb033650b18e122fa6b161eadd5f88978d08751f72ee8474 | https://repo.maven.apache.org/maven2/org/ow2/asm/asm-analysis/7.0/asm-analysis-7.0.jar
c6b54477e9d5bae1e7addff2e24cbf92aaff2ff08fd6bc0596c3933c3fadc2cb | https://repo.maven.apache.org/maven2/org/ow2/asm/asm-analysis/7.0/asm-analysis-7.0.pom
fed348ef05958e3e846a3ac074a12af5f7936ef3d21ce44a62c4fa08a771927d | https://repo.maven.apache.org/maven2/org/ow2/asm/asm-commons/7.0/asm-commons-7.0.jar
f4c697886cdb4a5b2472054a0b5e34371e9b48e620be40c3ed48e1f4b6d51eb4 | https://repo.maven.apache.org/maven2/org/ow2/asm/asm-commons/7.0/asm-commons-7.0.pom
cfd7a0874f9de36a999c127feeadfbfe6e04d4a71ee954d7af3d853f0be48a6c | https://repo.maven.apache.org/maven2/org/ow2/asm/asm-tree/7.0/asm-tree-7.0.jar
d39e7dd12f4ff535a0839d1949c39c7644355a4470220c94b76a5c168c57a068 | https://repo.maven.apache.org/maven2/org/ow2/asm/asm-tree/7.0/asm-tree-7.0.pom
75fbbca440ef463f41c2b0ab1a80abe67e910ac486da60a7863cbcb5bae7e145 | https://repo.maven.apache.org/maven2/org/ow2/asm/asm-util/7.0/asm-util-7.0.jar
e07bce4bb55d5a06f4c10d912fc9dee8a9b9c04ec549bbb8db4f20db34706f75 | https://repo.maven.apache.org/maven2/org/ow2/asm/asm-util/7.0/asm-util-7.0.pom
b88ef66468b3c978ad0c97fd6e90979e56155b4ac69089ba7a44e9aa7ffe9acf | https://repo.maven.apache.org/maven2/org/ow2/asm/asm/7.0/asm-7.0.jar
83f65b1083d5ce4f8ba7f9545cfe9ff17824589c9a7cc82c3a4695801e4f5f68 | https://repo.maven.apache.org/maven2/org/ow2/asm/asm/7.0/asm-7.0.pom
0f8a1b116e760b8fe6389c51b84e4b07a70fc11082d4f936e453b583dd50b43b | https://repo.maven.apache.org/maven2/org/ow2/ow2/1.5/ow2-1.5.pom
fbd7b254e02d8aef60c418a5f0e14a783b38a16162caffb2d2a16ccd5d2c09b4 | https://repo.maven.apache.org/maven2/org/slf4j/slf4j-android/1.7.25/slf4j-android-1.7.25.jar
bd9b9cb1a3987b1427f7a18babe7f92078e32bbe2e1dca6dced00cc0e3a077a9 | https://repo.maven.apache.org/maven2/org/slf4j/slf4j-android/1.7.25/slf4j-android-1.7.25.pom
18c4a0095d5c1da6b817592e767bb23d29dd2f560ad74df75ff3961dbde25b79 | https://repo.maven.apache.org/maven2/org/slf4j/slf4j-api/1.7.25/slf4j-api-1.7.25.jar
7cd9d7a0b5d93dfd461a148891b43509cf403a9c7f9fb49060d3554df1c81e1e | https://repo.maven.apache.org/maven2/org/slf4j/slf4j-api/1.7.25/slf4j-api-1.7.25.pom
18f5c52120db036e88d6136f8839c832d074bdda95c756c6f429249d2db54ac6 | https://repo.maven.apache.org/maven2/org/slf4j/slf4j-parent/1.7.25/slf4j-parent-1.7.25.pom
b51f8867c92b6a722499557fc3a1fdea77bdf9ef574722fe90ce436a29559454 | https://repo.maven.apache.org/maven2/org/sonatype/oss/oss-parent/7/oss-parent-7.pom
fb40265f982548212ff82e362e59732b2187ec6f0d80182885c14ef1f982827a | https://repo.maven.apache.org/maven2/org/sonatype/oss/oss-parent/9/oss-parent-9.pom


code:
From a39b5c7b089c249f1ba04c297babe22d2bcd75f2 Mon Sep 17 00:00:00 2001
From: Georg Koppen <gk@torproject.org>
Date: Sat, 26 Dec 2020 21:17:59 +0000
Subject: [PATCH] test

diff --git a/android/build.gradle b/android/build.gradle
index a8d9bdc..e0eb541 100644
--- a/android/build.gradle
+++ b/android/build.gradle
@@ -7,6 +7,7 @@ buildscript {
         mavenLocal()
         mavenCentral()
         google()
+        jcenter()
     }
     dependencies {
         classpath "com.android.tools.build:gradle:${androidplugin}"
@@ -14,11 +15,11 @@ buildscript {
 }

 android {
-    compileSdkVersion 28
+    compileSdkVersion 29

     defaultConfig {
         minSdkVersion 16
-        targetSdkVersion 28
+        targetSdkVersion 29
         versionCode 1
         versionName "0.0.3"
         consumerProguardFiles 'proguard-rules.pro'
@@ -40,7 +41,9 @@ publishing {
             groupId 'com.msopentech.thali.toronionproxy.android'
             artifactId 'android'
             version '0.0.3'
-            artifact(sourceJar)
+            afterEvaluate {
+              artifact(sourceJar)
+            }
             artifact("$buildDir/outputs/aar/android-release.aar")
             pom.withXml {
                 def dependenciesNode = asNode().appendNode('dependencies')
diff --git a/android_tor_installer/build.gradle b/android_tor_installer/build.gradle
index 554fd49..92e84d4 100644
--- a/android_tor_installer/build.gradle
+++ b/android_tor_installer/build.gradle
@@ -7,6 +7,7 @@ buildscript {
         mavenLocal()
         mavenCentral()
         google()
+        jcenter()
     }
     dependencies {
         classpath "com.android.tools.build:gradle:${androidplugin}"
@@ -14,11 +15,11 @@ buildscript {
 }

 android {
-    compileSdkVersion 28
+    compileSdkVersion 29

     defaultConfig {
         minSdkVersion 16
-        targetSdkVersion 28
+        targetSdkVersion 29
         versionCode 1
         versionName "0.0.3"

@@ -48,7 +49,7 @@ repositories {
     mavenLocal()
     mavenCentral()
     google()
-    maven { url "https://repo.spring.io/plugins-release" }
+    jcenter()
     maven { url "https://raw.githubusercontent.com/guardianproject/gpmaven/master" }

 }
diff --git a/build.gradle b/build.gradle
index a269024..43b9e13 100644
--- a/build.gradle
+++ b/build.gradle
@@ -8,7 +8,7 @@ subprojects {
   repositories {
     mavenLocal()
     mavenCentral()
-    maven { url "https://repo.spring.io/plugins-release" }
+    jcenter()
   }
 }

--
2.30.0.rc2

repo_name: JeremyRand/tor

license: mit


code:
#!/bin/bash
[% c("var/set_default_env") -%]
[% pc(c('var/compiler'), 'var/setup', { compiler_tarfile => c('input_files_by_name/' _ c('var/compiler')) }) %]
distdir=/var/tmp/dist/[% project %]
mkdir -p /var/tmp/build

[% IF c("var/android") %]
  TORCONFIGDIR="$distdir/assets/common"
  libsdir=$distdir/jniLibs/[% c("var/abi") %]
  mkdir -p $libsdir $TORCONFIGDIR "$distdir/Tor"
  # We need to make sure our ZSTD dependencey is properly picked up.
  # --enable-zstd is not enough.
  export ZSTD_CFLAGS=-I/var/tmp/dist/zstd/include
  export ZSTD_LIBS=/var/tmp/dist/zstd/lib/libzstd.a
[% END %]

[% IF c("var/linux") || c("var/windows") %]
  TORCONFIGDIR="$distdir/Data/Tor"
  mkdir -p $TORCONFIGDIR
  mkdir -p "$distdir/Tor"
[% END %]

[% IF c("var/osx") %]
  TORBINDIR="$distdir/Contents/MacOS/Tor"
  TORCONFIGDIR="$distdir/Contents/Resources/TorBrowser/Tor"
  mkdir -p $distdir/bin
  mkdir -p $TORBINDIR
  mkdir -p $TORCONFIGDIR
[% END %]

[% IF c("var/windows") || c("var/android") %]
  tar -C /var/tmp/dist -xf [% c('input_files_by_name/zlib') %]
  zlibdir=/var/tmp/dist/zlib
[% END %]
[% IF c("var/android") %]
  tar -C /var/tmp/dist -xf [% c('input_files_by_name/zstd') %]
[% END %]
tar -C /var/tmp/dist -xf [% c('input_files_by_name/openssl') %]
tar -C /var/tmp/dist -xf [% c('input_files_by_name/libevent') %]
tar -C /var/tmp/build -xf [% project %]-[% c('version') %].tar.gz
libeventdir=/var/tmp/dist/libevent
openssldir=/var/tmp/dist/openssl/openssl

[% IF c("var/windows") %]
  # XXX: It's a bit unfortunate but we need the pthread dll here as libevent
  # gets compiled with pthread support once it is enabled in GCC, which we need
  # to do as otherwise the Rust compilaton breaks.
  mingwlibs=/var/tmp/dist/mingw-w64/[% c("arch") %]-w64-mingw32/bin/
  cp $zlibdir/lib/*.dll $openssldir/bin/*.dll $libeventdir/bin/*.dll \
      $gcclibs/*.dll $mingwlibs/libwinpthread-1.dll $distdir/Tor/
[% END %]

[% IF c("var/linux") %]
  mkdir -p "$distdir/Debug/Tor"
  cp $openssldir/lib/libssl.so.1.1 "$distdir/Tor/"
  cp $openssldir/lib/libcrypto.so.1.1 "$distdir/Tor/"
  cp $libeventdir/lib/libevent-2.1.so.7 "$distdir/Tor/"
  # We need to copy the libstdc++.so.6 for Tor Browser on older Linux distros.
  # Copying it into /Browser, which feels more natural, and amending
  # LD_LIBRARY_PATH breaks updates from a Tor Browser with the old
  # LD_LIBRARY_PATH value to the Tor Browser with the newer one. Thus, we copy
  # the libstdc++ into the directory with the libs tor depends on, too. See bug
  # 13359 for further details.
  libstdc_dir="$distdir/Tor/libstdc++"
  mkdir -p $libstdc_dir
  cp /var/tmp/dist/gcc/[% c("var/libdir") %]/libstdc++.so.6 $libstdc_dir/
  [% IF c("var/asan") -%]
    cp /var/tmp/dist/gcc/[% c("var/libdir") %]/libasan.so.6 "$distdir/Tor/"
    cp /var/tmp/dist/gcc/[% c("var/libdir") %]/libubsan.so.1 "$distdir/Tor/"
  [% END -%]
  chmod 700 "$distdir"/Tor/*.so*
  chmod 700 $libstdc_dir/libstdc++.so.6
  strip $libstdc_dir/libstdc++.so.6
  # This is needed to make RPATH unavailable. See bug 9150.
  export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$distdir/Tor/"
[% END %]

[% IF c("var/osx") %]
  cp $libeventdir/lib/libevent-*.dylib $TORBINDIR/
[% END %]

cd /var/tmp/build/[% project %]-[% c('version') %]
# add git hash to micro-revision.i for #24995
echo '"[% c("abbrev", { abbrev_length => 16 }) %]"' > micro-revision.i
./autogen.sh
find -type f -print0 | xargs -0 [% c("touch") %]
./configure --disable-asciidoc --with-libevent-dir="$libeventdir" --with-openssl-dir="$openssldir" \
    [% IF c("var/asan") %]--enable-fragile-hardening[% END %] \
    [% IF c("var/windows") || c("var/android") %]--with-zlib-dir="$zlibdir"[% END %] \
    [% IF c("var/osx") %]--enable-static-openssl[% END %] \
    --prefix="$distdir" [% c("var/configure_opt") %]
[% IF c("var/osx") -%]
  export LD_PRELOAD=[% c("var/faketime_path") %]
  export FAKETIME="[% USE date; GET date.format(c('timestamp'), format = '%Y-%m-%d %H:%M:%S') %]"
[% END -%]
make -j[% c("num_procs") %]
make install
[% IF c("var/osx") -%]
  unset LD_PRELOAD
[% END -%]
cp $distdir/share/tor/geoip $TORCONFIGDIR
cp $distdir/share/tor/geoip6 $TORCONFIGDIR

[% IF c("var/osx") %]
  LIBEVENT_FILE=`basename $libeventdir/lib/libevent-*.dylib`
  cd $distdir
  cp bin/tor $TORBINDIR/
  cd $TORBINDIR/
  x86_64-apple-darwin-install_name_tool -change $libeventdir/lib/$LIBEVENT_FILE @executable_path/$LIBEVENT_FILE tor
[% END %]

cd $distdir
[% IF c("var/windows") %]
  install -s $distdir/bin/tor.exe $distdir/Tor/
[% IF c("var/expert_bundle") %]
  install -s $distdir/bin/tor-gencert.exe $distdir/Tor/
[% END %]
[% END %]

[% IF c("var/linux") %]
  # Strip and generate debuginfo for libs
  objcopy --only-keep-debug $distdir/bin/tor $distdir/Debug/Tor/tor
  install -s $distdir/bin/tor $distdir/Tor/
  objcopy --add-gnu-debuglink=./Debug/Tor/tor $distdir/Tor/tor
  for i in $distdir/Tor/*so*
  do
      LIB=`basename $i`
      objcopy --only-keep-debug $distdir/Tor/$LIB $distdir/Debug/Tor/$LIB
      strip $distdir/Tor/$LIB
      objcopy --add-gnu-debuglink=./Debug/Tor/$LIB $distdir/Tor/$LIB
  done
[% END %]

[% IF c("var/android") %]
  install -s --strip-program=[% c("var/cross_prefix") %]-strip $distdir/bin/tor $libsdir/libTor.so
[% END %]

mkdir -p [% dest_dir _ '/' _ c('filename') %]
[%
   IF c("var/expert_bundle");
     SET win_arch = c('var/windows-x86_64') ? 'win64' : 'win32';
     c('zip', {
        zip_src => [ 'Data', 'Tor', ],
        zip_args => dest_dir _ '/' _ c('filename') _ '/tor-' _ win_arch _ '-' _ c("version") _ '.zip',
      });
   ELSE;
     IF c("var/osx");
       SET tarsrcdir = [ 'Contents' ];
     ELSIF c("var/android");
       SET tarsrcdir = [ 'assets', 'jniLibs' ];
     ELSE;
       SET tarsrcdir = [ 'Data', 'Tor', ];
     END;
     c('tar', {
          tar_src => tarsrcdir,
          tar_args => '-czf ' _ dest_dir _ '/' _ c('filename') _ '/tor.tar.gz',
      });
   END;
%]

[% IF c("var/linux") %]
[% c('tar', {
        tar_src => [ 'Debug' ],
        tar_args => '-cJf ' _ dest_dir _ '/' _ c('filename') _ '/tor-debug.tar.xz',
    }) %]
[% END %]

path: projects/tor/build


code:
# vim: filetype=yaml sw=2
filename: '[% project %]-[% c("version") %]-[% c("var/osname") %]-[% c("var/build_id") %]'
version: 0.4.7.8
git_hash: 'tor-[% c("version") %]'
git_url: https://git.torproject.org/tor.git
git_submodule: 1
gpg_keyring: tor.gpg
tag_gpg_id: 1
container:
  use_container: 1

var:
  deps:
    - build-essential
    - automake
    - zip
    - unzip

targets:
  nightly:
    version: '[% c("abbrev") %]'
    git_hash: main
    tag_gpg_id: 0

  linux-i686:
    var:
      libdir: lib32
      sort_deps: 0
      arch_deps:
        - libtool
        - zlib1g-dev:i386
        - hardening-wrapper
  linux-x86_64:
    var:
      libdir: lib64
      arch_deps:
        - libtool
        - zlib1g-dev
        - hardening-wrapper
  osx-x86_64:
    var:
      arch_deps:
        - faketime
  expert-bundle:
    var:
      expert_bundle: 1
      flag_mwindows: ''
  android:
    var:
      configure_opt_project: '--enable-android --enable-static-openssl --enable-static-libevent --enable-zstd --disable-tool-name-check --disable-system-torrc --disable-system-torrc'
      arch_deps:
        - libtinfo5

input_files:
  - project: container-image
  - name: openssl
    project: openssl
  - name: libevent
    project: libevent
  - name: zlib
    project: zlib
    enable: '[% c("var/windows") || c("var/android") %]'
  - name: '[% c("var/compiler") %]'
    project: '[% c("var/compiler") %]'
  - name: zstd
    project: zstd
    enable: '[% c("var/android") %]'

path: projects/tor/config


code:
#!/bin/bash
[% c("var/set_default_env") -%]

tar xvf [% project %]-[% c('version') %].tar.gz

mkdir -p /var/tmp/dist/
cd /var/tmp/dist/

cp -a $rootdir/[% project %]*/[% project %]/src_py3/[% project %].py ./[% project %].py

[% c('tar', {
        tar_src => '.',
        tar_args => '-czf ' _ dest_dir _ '/' _ c('filename'),
        }) %]


code:
# vim: filetype=yaml sw=2
version: 3.7.4
git_url: https://github.com/python/typing.git
git_hash: baf63c5924a2b9695175df5d47ced40596024b78
# TODO: This Git repo uses GPG sigs; we should switch from commit hash to GPG verification.
filename: "[% project %]-[% c('version') %]-[% c('var/build_id') %].tar.gz"
container:
  use_container: 1
input_files:
  - project: container-image


code:
diff --git a/uniffi_bindgen/src/interface/types.rs b/uniffi_bindgen/src/interface/types.rs
index 6448d58..b7efd22 100644
--- a/uniffi_bindgen/src/interface/types.rs
+++ b/uniffi_bindgen/src/interface/types.rs
@@ -26,7 +26,7 @@
 use anyhow::bail;
 use anyhow::Result;
 use std::convert::TryFrom;
-use std::{collections::hash_map::Entry, collections::HashMap, collections::HashSet};
+use std::{collections::hash_map::Entry, collections::HashMap, collections::BTreeSet};

 use super::Attributes;

@@ -71,7 +71,7 @@ pub enum FFIType {
 /// Represents all the different high-level types that can be used in a component interface.
 /// At this level we identify user-defined types by name, without knowing any details
 /// of their internal structure apart from what type of thing they are (record, enum, etc).
-#[derive(Debug, Clone, Eq, PartialEq, Hash)]
+#[derive(Debug, Clone, Eq, PartialEq, Hash, PartialOrd, Ord)]
 pub enum Type {
     // Primitive types.
     UInt8,
@@ -195,7 +195,7 @@ pub(crate) struct TypeUniverse {
     // Named type definitions (including aliases).
     type_definitions: HashMap<String, Type>,
     // All the types in the universe, by canonical type name.
-    all_known_types: HashSet<Type>,
+    all_known_types: BTreeSet<Type>,
 }

 impl TypeUniverse {


code:
#!/bin/bash
[% c("var/set_default_env") -%]
distdir=/var/tmp/dist
builddir=/var/tmp/build/[% project %]
mkdir -p $distdir/[% project %]
tar -C $distdir -xf $rootdir/[% c('input_files_by_name/rust') %]
export PATH="/var/tmp/dist/rust/bin:$PATH"
mkdir -p /var/tmp/build
tar -C /var/tmp/build -xf [% project %]-[% c('version') %].tar.gz

# Now prepare the offline build
# Move the directory for hardcoding the path in .cargo/config
mv /var/tmp/build/[% project %]-[% c('version') %] $builddir
tar -C $builddir -xjf uniffi-rs-vendor-[% c('version') %].tar.bz2
cd $builddir
mkdir .cargo
cat > .cargo/config << 'EOF'
[source.crates-io]
replace-with = "vendored-sources"

[source.vendored-sources]
directory = "/var/tmp/build/uniffi-rs/vendor"
EOF

# We change the data type of the `all_known_types` Set from HashSet to BTreeSet.
# Uniffi iterates over the elements of this set, and iteration over a HashSet occurs
# in an arbitrary order, while iteration over a BTreeSet orders in a defined (and
# deterministic) order. This patch solves a build reproducibility issue, see
# tor-browser-build#40208.
#
# Upstream bug: https://github.com/mozilla/uniffi-rs/issues/374
patch -p1 < $rootdir/btreeset.patch
# We usually use --frozen but there is no Cargo.lock file available. Thus resort
# to --offline.
cargo build --release --offline --target x86_64-unknown-linux-gnu
mv target/x86_64-unknown-linux-gnu/release/uniffi-bindgen $distdir/[% project %]

cd $distdir
[% c('tar', {
        tar_src => [ project ],
        tar_args => '-czf ' _ dest_dir _ '/' _ c('filename'),
    }) %]

path: projects/uniffi-rs/build


code:
# vim: filetype=yaml sw=2
version: 0.7.0
git_url: https://github.com/mozilla/uniffi-rs
git_hash: ea3ff0402438ef1ebceda4c5fbbbd2ed6a9be227
filename: '[% project %]-[% c("version") %]-[% c("var/build_id") %].tar.gz'

container:
  use_container: 1

input_files:
  - project: container-image
  - name: rust
    project: rust
  # Use `make cargo_vendor-uniffi-rs` to re-generate the vendor tarball
  - URL: https://people.torproject.org/~boklm/mirrors/sources/uniffi-rs-vendor-[% c('version') %].tar.bz2
    sha256sum: 8f201df618b3e7bcaaf01a87e0d55171605b80abeb1b660fe4dd0b9bfc10a0d8
  - filename: btreeset.patch

steps:
  cargo_vendor:
    filename: '[% project %]-vendor-[% c("version") %].tar.bz2'
    input_files:
      - project: container-image
        pkg_type: build
      - project: rust
        name: rust
        pkg_type: build

path: projects/uniffi-rs/config


code:
# vim: filetype=yaml sw=2
version: '[% c("abbrev") %]'
git_url: https://github.com/google/uuid
git_hash: 44b5fee7c49cf3bcdf723f106b36d56ef13ccc88 #v1.3.0
filename: '[% project %]-[% c("version") %]-[% c("var/osname") %]-[% c("var/build_id") %].tar.gz'
container:
  use_container: 1

build: '[% c("projects/go/var/build_go_lib") %]'

var:
  go_lib: github.com/google/uuid

input_files:
  - project: container-image
  - name: go
    project: go

path: projects/uuid/config


code:
#!/bin/bash
[% c("var/set_default_env") -%]
[% IF c("var/linux") %]
  # We need a link to our GCC, otherwise the system cc gets used which points to
  # /usr/bin/gcc.
  [% pc('gcc', 'var/setup', { compiler_tarfile => c('input_files_by_name/gcc'),
                              hardened_gcc => 0 }) %]
  ln -s gcc /var/tmp/dist/gcc/bin/cc
  tar -C /var/tmp/dist -xf $rootdir/[% c('input_files_by_name/binutils') %]
  export PATH="/var/tmp/dist/binutils/bin:$PATH"
[% END -%]
distdir=/var/tmp/dist
builddir=/var/tmp/build/[% project %]
mkdir -p $distdir
tar -C /var/tmp/dist -xf [% c('input_files_by_name/cmake') %]
tar -C /var/tmp/dist -xf [% c('input_files_by_name/ninja') %]
export PATH=/var/tmp/dist/binutils/bin:/var/tmp/dist/cmake/bin:/var/tmp/dist/ninja:$PATH

mkdir -p /var/tmp/build
tar -C /var/tmp/build -xf [% project %]-[% c('version') %].tar.gz

mv /var/tmp/build/[% project %]-[% c('version') %] $builddir
cd $builddir
# We have no .git in our tar ball but the script version.sh used by
# the Makefile depends on that. We replace the script.
cat > 'version.sh' << EOF
#!/bin/sh
echo '[% c("abbrev") %]'
EOF

# XXX: We don't want to use the clang 9.0 wasi-sdk would use, see:
# https://bugzilla.mozilla.org/show_bug.cgi?id=1605708
make -j[% c("num_procs") %] PREFIX=$distdir/[% project %] DESTDIR=/

cd $distdir
[% c('tar', {
        tar_src => [ project ],
        tar_args => '-czf ' _ dest_dir _ '/' _ c('filename'),
    }) %]

path: projects/wasi-sysroot/build


code:
# vim: filetype=yaml sw=2
filename: '[% project %]-[% c("version") %]-[% c("var/osname") %]-[% c("var/build_id") %].tar.gz'
version: '[% c("abbrev") %]'
git_hash: b36c433738f0c29160a5ac1c1cee1b1b884bf4a0
git_url: https://github.com/CraneStation/wasi-sdk
git_submodule: 1

container:
  use_container: 1

targets:
  linux:
    var:
      arch_deps:
        - patch

input_files:
  - project: container-image
  - name: binutils
    project: binutils
    enable: '[% c("var/linux") %]'
  - project: '[% c("var/compiler") %]'
    name: '[% c("var/compiler") %]'
    enable: '[% c("var/linux") %]'
  - name: cmake
    project: cmake
  - name: ninja
    project: ninja

path: projects/wasi-sysroot/config


code:
#!/bin/bash
[% c("var/set_default_env") -%]

tar xvf [% project %]-[% c('version') %].tar.gz

mkdir -p /var/tmp/dist/[% project %]
cd /var/tmp/dist/

cp -a $rootdir/[% project %]*/[% project %]/*.py ./[% project %]/

[% c('tar', {
        tar_src => '.',
        tar_args => '-czf ' _ dest_dir _ '/' _ c('filename'),
        }) %]

path: projects/yarl/build


code:
# vim: filetype=yaml sw=2
version: 1.3.0
git_url: https://github.com/aio-libs/yarl.git
git_hash: 619cc2203b8888fb9ad552c4a3da6f8b31d1fbac
# TODO: This Git repo doesn't use GPG sigs.  We should pester them about that.
filename: "[% project %]-[% c('version') %]-[% c('var/build_id') %].tar.gz"
container:
  use_container: 1
input_files:
  - project: container-image

path: projects/yarl/config


code:
From 05796d3d8d5546cf1b4dfe2cd72ab746afae505d Mon Sep 17 00:00:00 2001
From: Mark Adler <madler@alumni.caltech.edu>
Date: Mon, 28 Mar 2022 18:34:10 -0700
Subject: [PATCH] Fix configure issue that discarded provided CC definition.

---
 configure | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/configure b/configure
index 52ff4a0..3fa3e86 100755
--- a/configure
+++ b/configure
@@ -174,7 +174,10 @@ if test -z "$CC"; then
   else
     cc=${CROSS_PREFIX}cc
   fi
+else
+  cc=${CC}
 fi
+
 cflags=${CFLAGS-"-O3"}
 # to force the asm version use: CFLAGS="-O3 -DASMV" ./configure
 case "$cc" in


code:
#!/bin/bash
[% c("var/set_default_env") -%]
[% pc(c('var/compiler'), 'var/setup', { compiler_tarfile => c('input_files_by_name/' _ c('var/compiler')) }) %]
distdir=/var/tmp/dist/[% project %]
mkdir -p /var/tmp/build
tar -C /var/tmp/build -xf [% project %]-[% c('version') %].tar.gz
cd /var/tmp/build/[% project %]-[% c('version') %]

# Fix for tor-browser-build#40470
patch -p1 < $rootdir/0001-Fix-configure-issue-that-discarded-provided-CC-defin.patch

[% IF c("var/windows") -%]
  make BINARY_PATH=$distdir/lib INCLUDE_PATH=$distdir/include LIBRARY_PATH=$distdir/lib -f win32/Makefile.gcc PREFIX=[% c("arch") %]-w64-mingw32- -j[% c("num_procs") %] SHARED_MODE=1 LOC="[% c("var/CFLAGS") %] [% c("var/LDFLAGS") %]"
  make BINARY_PATH=$distdir/lib INCLUDE_PATH=$distdir/include LIBRARY_PATH=$distdir/lib -f win32/Makefile.gcc PREFIX=[% c("arch") %]-w64-mingw32- -j[% c("num_procs") %] SHARED_MODE=1 LOC="[% c("var/CFLAGS") %] [% c("var/LDFLAGS") %]" install
[% END -%]

[% IF c("var/android") -%]
  export CHOST=[% c("var/cross_prefix") %]
  export CC=[% c("var/CC") %]
  ./configure --prefix=$distdir
  make -j[% c("num_procs") %]
  make -j[% c("num_procs") %] install
  # Only need static libraries
  rm -r $distdir/lib/{*.so*,pkgconfig}
[% END -%]

cd /var/tmp/dist
[% c('tar', {
        tar_src => [ project ],
        tar_args => '-czf ' _ dest_dir _ '/' _ c('filename'),
    }) %]

path: projects/zlib/build


code:
# vim: filetype=yaml sw=2
filename: '[% project %]-[% c("version") %]-[% c("var/osname") %]-[% c("var/build_id") %].tar.gz'
version: 1.2.12
git_hash: 'v[% c("version") %]'
git_url: https://github.com/madler/zlib.git
gpg_keyring: zlib.gpg
tag_gpg_id: 1
container:
  use_container: 1

var:
  flag_mwindows: ''

input_files:
  - project: container-image
  - name: '[% c("var/compiler") %]'
    project: '[% c("var/compiler") %]'
  - filename: 0001-Fix-configure-issue-that-discarded-provided-CC-defin.patch

path: projects/zlib/config


code:
#!/bin/bash
[% c("var/set_default_env") -%]
[% pc(c('var/compiler'), 'var/setup', { compiler_tarfile => c('input_files_by_name/' _ c('var/compiler')) }) %]
distdir=/var/tmp/dist/[% project %]
mkdir -p $distdir
mkdir -p /var/tmp/build
tar -C /var/tmp/build -xf [% project %]-[% c('version') %].tar.gz
cd /var/tmp/build/[% project %]-[% c('version') %]
export CPPFLAGS=-DZSTD_MULTITHREAD
export CC=[% c("var/CC") %]
make -C lib -j[% c("num_procs") %] PREFIX=$distdir install
# Only need static libraries
rm $distdir/lib/libzstd.so*
cd /var/tmp/dist
[% c('tar', {
        tar_src => [ project ],
        tar_args => '-czf ' _ dest_dir _ '/' _ c('filename'),
    }) %]

path: projects/zstd/build


code:
# vim: filetype=yaml sw=2
version: 1.4.8
git_url: https://github.com/facebook/zstd.git
git_hash: 97a3da1df009d4dc67251de0c4b1c9d7fe286fc1
filename: '[% project %]-[% c("version") %]-[% c("var/osname") %]-[% c("var/build_id") %].tar.gz'

container:
  use_container: 1

input_files:
  - project: container-image
  - name: '[% c("var/compiler") %]'
    project: '[% c("var/compiler") %]'

path: projects/zstd/config


code:
# vim: filetype=yaml sw=2
debug: '[% GET ! ENV.RBM_NO_DEBUG %]'
output_dir: "out/[% project %]"
tmp_dir: '[% c("basedir") %]/tmp'
build_log: '[% GET ENV.RBM_LOGS_DIR ? ENV.RBM_LOGS_DIR : "logs" %]/[% project %][% IF c("var/osname") %]-[% c("var/osname") %][% END %].log'

pkg_type: build

container:
  disable_network:
    # disable network in the build scripts
    build: 1

steps:
  src-tarballs:
    compress_tar: xz
    src-tarballs: |
      #!/bin/bash
      set -e
      mkdir -p '[% dest_dir %]'
      mv -vf '[% project %]-[% c("version") %].tar.xz' '[% dest_dir %]/[% c("filename") %]'

  list_toolchain_updates:
    build_log: '-'
    list_toolchain_updates: '[% INCLUDE list_toolchain_updates %]'

  cargo_vendor:
    output_dir: "out/[% project %]/cargo_vendor"
    var:
      container:
        suite: bullseye
        arch: amd64
      pre_pkginst: ''
      deps:
        - patch
        - bzip2
    cargo_vendor: |
      #!/bin/bash
      [% c("var/set_default_env") %]
      mkdir /var/tmp/dist
      # NOTE: since different projects need different rust versions,
      # we use the version of cargo produced by the rust project
      # build rather than the build container's debian package.
      # Thus, any project that wants to run a `cargo_vendor` step
      # must be sure to provide the rust project as an `input_file`.
      # See, e.g.,`application-services/config.steps.cargo_vendor.input_files`.
      tar -C /var/tmp/dist -xf [% c('input_files_by_name/rust') %]
      export PATH="/var/tmp/dist/rust/bin:$PATH"
      tar -xf [% project %]-[% c('version') %].tar.gz
      cd [% project %]-[% c('version') %]
      [% c("var/pre_cargo_vendor") %]
      cargo vendor vendor [% c("var/cargo_vendor_opts") %]
      [% c('tar', {
        tar_src => [ 'vendor' ],
        tar_args => '-caf ' _ dest_dir _ '/' _ c('filename'),
        }) %]
      cd [% dest_dir %]
      fname="out/[% project %]/cargo_vendor/[% c('filename') %]"
      echo
      echo "Finished creating $fname"
      sha256sum "[% c('filename') %]"
      echo "You can upload it with:"
      echo "  scp -p $fname people.torproject.org:public_html/mirrors/sources"

# buildconf contains build options that the user can change in rbm.local.conf
# When adding a new option to buildconf, a default value should be defined
# in var/build_id, so that changing this option does not affect the build_id.
buildconf:
  git_signtag_opt: '-s'

var:
  torbrowser_version: '11.5a13'
  torbrowser_build: 'build2'
  torbrowser_incremental_from:
    - 11.5a12
  multi_lingual: 0
  build_mar: 1
  # By default, we sort the list of installed packages. This allows sharing
  # containers with identical list of packages, even if they are not listed
  # in the same order. In the cases where the installation order is
  # important, sort_deps should be set to 0.
  sort_deps: 1
  build_id: '[% sha256(c("var/build_id_txt", { num_procs => 4 })).substr(0, 6) %]'
  build_id_txt: |
    [% c("version") %]
    [% IF c("git_hash") || c("hg_hash"); GET c("abbrev"); END; %]
    [% IF c("container/use_container") && ! c("container/global_disable") -%]
    [% c("var/container/suite") %]
    [% c("var/container/arch") %]
    [% END -%]
    input_files: [% c("input_files_id") %]
    build:
    [% SET step = c("step") -%]
    [% c(step, { filename => 'f', output_dir => '/out', norec => {} }) %]

  locale_ja: ja
  locales:
    - ar
    - ca
    - cs
    - da
    - de
    - el
    - es-AR
    - es-ES
    - fa
    - fr
    - ga-IE
    - he
    - hu
    - id
    - is
    - it
    - '[% c("var/locale_ja") %]'
    - ka
    - ko
    - lt
    - mk
    - ms
    - my
    - nb-NO
    - nl
    - pl
    - pt-BR
    - ro
    - ru
    - sv-SE
    - th
    - tr
    - vi
    - zh-CN
    - zh-TW
  locales_mobile:
    - ar
    - ca
    - cs
    - da
    - de
    - el
    - es-rAR
    - es-rES
    - fa
    - fr
    - ga-rIE
    - hu
    - in
    - is
    - it
    - iw
    - ja
    - ka
    - ko
    - lt
    - my
    - nb-rNO
    - nl
    - pl
    - pt-rBR
    - ro
    - ru
    - sv-rSE
    - th
    - tr
    - vi
    - zh-rCN
    - zh-rTW

  sign_build: '[% ENV.RBM_SIGN_BUILD %]'
  sign_build_gpg_opts: '[% ENV.RBM_GPG_OPTS %]'

  set_default_env: |
    set -e
    [% FOREACH env = c('ENV') -%]
    export [% env.key %]="[% env.value %]"
    [% END -%]
    rootdir=$(pwd)
    export SHELL=/bin/bash
    export HOME=$rootdir
    umask 0022
    [% IF c("container/global_disable") -%]
      rm -Rf /var/tmp/build /var/tmp/dist
    [% END -%]

  DOCSDIR_project: '[% project %]'
  set_PTDIR_DOCSDIR: |
    PTDIR="$distdir/TorBrowser/Tor/PluggableTransports"
    DOCSDIR="$distdir/TorBrowser/Docs/[% c("var/DOCSDIR_project") %]"

targets:
  notarget: linux-x86_64
  noint:
    debug: 0

  release:
    var:
      release: 1
      channel: release
  alpha:
    var:
      alpha: 1
      channel: alpha
  nightly:
    fetch: 1
    var:
      nightly: 1
      channel: nightly
      torbrowser_version: |
        [%
           IF ENV.TORBROWSER_NIGHTLY_VERSION;
                GET ENV.TORBROWSER_NIGHTLY_VERSION;
           ELSIF c("var/testbuild");
                GET "testbuild";
           ELSE;
                GET c("var_p/nightly_torbrowser_version");
           END;
        -%]
      # For nightly builds, we support updates for a limited set of locales
      mar_locales:
        - de
        - es-ES
        - fr
        - ru
      max_torbrowser_incremental_from: 2
      build_infos_json: 1

  torbrowser:
    var:
      tor-browser: 1
      project-name: tor-browser
      projectname: torbrowser
      Project_Name: 'Tor Browser'
      ProjectName: TorBrowser

  basebrowser:
    var:
      base-browser: 1
      project-name: base-browser
      projectname: basebrowser
      Project_Name: 'Base Browser'
      ProjectName: BaseBrowser

  torbrowser-testbuild:
    - testbuild
    - alpha
    - torbrowser
  basebrowser-testbuild:
    - testbuild
    - alpha
    - basebrowser
  testbuild:
    var:
      testbuild: 1
      # Don't create mar files to save time
      build_mar: 0
      # Building only one architecture saves a lot of time
      android_single_arch: 1

  torbrowser-android-armv7:
    - android-armv7
    - android
    - torbrowser
  basebrowser-android-armv7:
    - android-armv7
    - android
    - basebrowser
  android-armv7:
    arch: armv7
    var:
      android-armv7: 1
      osname: android-armv7
      toolchain_arch: arm
      abi: armeabi-v7a
      cross_prefix: armv7a-linux-androideabi
  torbrowser-android-x86:
    - android-x86
    - android
    - torbrowser
  basebrowser-android-x86:
    - android-x86
    - android
    - basebrowser
  android-x86:
    arch: x86
    var:
      android-x86: 1
      osname: android-x86
      toolchain_arch: x86
      abi: x86
      cross_prefix: i686-linux-android
  torbrowser-android-x86_64:
    - android-x86_64
    - android
    - torbrowser
  basebrowser-android-x86_64:
    - android-x86_64
    - android
    - basebrowser
  android-x86_64:
    arch: x86_64
    var:
      android-x86_64: 1
      osname: android-x86_64
      toolchain_arch: x86_64
      abi: x86_64
      cross_prefix: x86_64-linux-android
  torbrowser-android-aarch64:
    - android-aarch64
    - android
    - torbrowser
  basebrowser-android-aarch64:
    - android-aarch64
    - android
    - basebrowser
  android-aarch64:
    arch: aarch64
    var:
      android-aarch64: 1
      osname: android-aarch64
      toolchain_arch: arm64
      abi: arm64-v8a
      cross_prefix: aarch64-linux-android
  android:
    container:
      disable_network:
        # Disable network in the script for merging GeckoView .aar files
        merge_aars: 1
    var:
      android: 1
      compiler: android-toolchain
      android_min_api: '[% GET c("var/android_min_api_" _ c("arch")) %]'
      CC: '[% c("var/cross_prefix") %][% c("var/android_min_api") %]-clang'
      CXX: '[% c("var/cross_prefix") %][% c("var/android_min_api") %]-clang'
      # API 21 is the minimum we currently support on Android
      android_min_api_armv7: 21
      android_min_api_x86: 21
      android_min_api_x86_64: 21
      android_min_api_aarch64: 21
      container:
        suite: bullseye
        arch: amd64
      deps:
        - build-essential
        - python3
        - python3-distutils
        - automake
        - libtool
        - zip
        - unzip
        - libtinfo5
      configure_opt: '--host=[% c("var/cross_prefix") %] CC=[% c("var/CC") %] [% c("var/configure_opt_project") %]'

      pre_pkginst: |
          SNAPSHOT_VERSION=20191201T212855Z
          OPENJDK_URL=https://snapshot.debian.org/archive/debian/$SNAPSHOT_VERSION/pool/main/o/openjdk-8
          JDK_VERSION=8u232-b09-1~deb9u1_amd64
          apt-get install -y -q wget ca-certificates-java
          wget $OPENJDK_URL/openjdk-8-jdk-headless_$JDK_VERSION.deb
          wget $OPENJDK_URL/openjdk-8-jre-headless_$JDK_VERSION.deb
          echo 92b4f8fb77d793a86e0b03b3b0750592b40a26a5d75956d10dd984a7b3aad4c9 openjdk-8-jdk-headless_$JDK_VERSION.deb | sha256sum -c
          echo 84bf52b6cce20ead08b0d5b9fd9b81b4aa3da385ca951b313fe11d5cb1aa4d17 openjdk-8-jre-headless_$JDK_VERSION.deb | sha256sum -c
          apt-get install -y -q ./openjdk-8-jre-headless_$JDK_VERSION.deb ./openjdk-8-jdk-headless_$JDK_VERSION.deb
  torbrowser-linux-x86_64:
    - linux-x86_64
    - linux
    - torbrowser
  basebrowser-linux-x86_64:
    - linux-x86_64
    - linux
    - basebrowser
  torbrowser-linux-x86_64-asan:
    - linux-asan
    - linux-x86_64
    - linux
    - torbrowser
  basebrowser-linux-x86_64-asan:
    - linux-asan
    - linux-x86_64
    - linux
    - basebrowser
  torbrowser-linux-i686:
    - linux-i686
    - linux
    - torbrowser
  basebrowser-linux-i686:
    - linux-i686
    - linux
    - basebrowser
  torbrowser-linux-arm:
    - linux-arm
    - linux-cross
    - linux
    - torbrowser
  basebrowser-linux-arm:
    - linux-arm
    - linux-cross
    - linux
    - basebrowser
  linux-x86_64:
    arch: x86_64
    var:
      linux-x86_64: 1
      osname: linux-x86_64
      linux-cross: 0
      arch_debian: amd64
      # We only support RLBox on the nightly channel and x86_64 for now
      rlbox: 0
  linux-i686:
    arch: i686
    var:
      linux-i686: 1
      osname: linux-i686
      linux-cross: 0
      configure_opt: '--host=i686-linux-gnu CFLAGS=-m32 CXXFLAGS=-m32 LDFLAGS=-m32 [% c("var/configure_opt_project") %]'
      arch_debian: i386
  linux-arm:
    arch: arm
    var:
      linux-arm: 1
      osname: linux-arm
      crosstarget: arm-linux-gnueabihf
      arch_debian: armhf
  linux-cross:
    var:
      linux-cross: 1
      container:
        arch: amd64
      configure_opt: '--host=[% c("var/crosstarget") %] [% c("var/configure_opt_project") %]'
  linux:
    var:
      linux: 1
      compiler: gcc
      configure_opt: '[% c("var/configure_opt_project") %]'
      # Only build Namecoin for linux on nightly
      namecoin: '[% c("var/nightly") && c("var/tor-browser") %]'
      container:
        suite: jessie
        arch: amd64
      pre_pkginst: dpkg --add-architecture i386
      deps:
        - libc6-dev-i386
        - lib32stdc++6
        - build-essential
        - python
        - bison
        - hardening-wrapper
        - automake
        - libtool
        - zip
        - unzip
  linux-asan:
    var:
      asan: 1
      # RLBox needs clang to create .wasm files but we use mostly GCC for our
      # ASan builds. Thus, the compilation currently breaks with RLBox enabled.
      # See: tor-browser-build#40063.
      rlbox: 0

  torbrowser-windows-i686:
    - windows-i686
    - windows
    - torbrowser
  basebrowser-windows-i686:
    - windows-i686
    - windows
    - basebrowser
  torbrowser-windows-x86_64:
    - windows-x86_64
    - windows
    - torbrowser
  basebrowser-windows-x86_64:
    - windows-x86_64
    - windows
    - basebrowser
  windows-x86_64:
    arch: x86_64
    var:
      windows-x86_64: 1
      windows-i686: 0
      osname: windows-x86_64
      # HEASLR is 64 bit only (see bug 12968)
      flag_HEASLR: '-Wl,--high-entropy-va'
  windows-i686:
    arch: i686
    var:
      windows-i686: 1
      windows-x86_64: 0
      osname: windows-i686
      # mingw-w64 does not support SEH on 32bit systems. Be explicit about that.
      flag_noSEH: '-Wl,--no-seh'
  windows:
    var:
      windows: 1
      container:
        suite: bullseye
        arch: amd64
      configure_opt: '--host=[% c("arch") %]-w64-mingw32 CFLAGS="[% c("var/CFLAGS") %]" LDFLAGS="[% c("var/LDFLAGS") %]" [% c("var/configure_opt_project") %]'
      CFLAGS: '-fstack-protector-strong -fno-strict-overflow -Wno-missing-field-initializers -Wformat -Wformat-security [% c("var/flag_mwindows") %]'
      LDFLAGS: '-Wl,--dynamicbase -Wl,--nxcompat -Wl,--enable-reloc-section -Wl,--no-insert-timestamp -lssp -L$gcclibs [% c("var/flag_HEASLR") %] [% c("var/flag_noSEH") %] [% c("var/flag_mwindows") %]'
      flag_mwindows: '-mwindows'
      compiler: mingw-w64
      deps:
        - build-essential
        - python3
        - python3-distutils
        - bison
        - automake
        - libtool
        - zip
        - unzip

  torbrowser-osx-x86_64:
    - osx-x86_64
    - torbrowser
  basebrowser-osx-x86_64:
    - osx-x86_64
    - basebrowser
  osx-x86_64:
    arch: x86_64
    var:
      osx: 1
      osname: osx-x86_64
      container:
        suite: bullseye
        arch: amd64
      compiler: 'macosx-toolchain'
      configure_opt: '--host=x86_64-apple-darwin CC="x86_64-apple-darwin-clang [% c("var/FLAGS") %]" CXX="x86_64-apple-darwin-clang++ [% c("var/FLAGS") %]" [% c("var/configure_opt_project") %]'
      FLAGS: "-target x86_64-apple-darwin -B $cctoolsdir -isysroot $sysrootdir"
      LDFLAGS: "-Wl,-syslibroot,$sysrootdir -Wl,-dead_strip -Wl,-pie"
      macosx_deployment_target: '10.12'
      locale_ja: ja-JP-mac
      rlbox: 0
      deps:
        - build-essential
        - python3
        - python3-distutils
        - automake
        - libtool
        - zip
        - unzip
      faketime_path: /usr/lib/x86_64-linux-gnu/faketime/libfaketime.so.1
      set_PTDIR_DOCSDIR: |
        PTDIR="$distdir/Contents/MacOS/Tor/PluggableTransports"
        DOCSDIR="$distdir/Contents/Resources/TorBrowser/Docs/[% c("var/DOCSDIR_project") %]"

  # The no_build_id target can be useful if you want to quickly display
  # a build template or other option but don't want to spend time to
  # compute the various build ids
  no_build_id:
    # The defaut timestamp value will use the commit time of the
    # selected commit for the project, which will require cloning the
    # git repository if it is not present. When we use the no_build_id
    # target to display a script, we usually don't care about such
    # details, so we set timestamp to 0 to avoid unnecessary cloning.
    timestamp: 0
    var:
      build_id: 1

  no_containers:
    container:
      global_disable: 1

# allow git tag signed using an expired key.
# https://bugs.torproject.org/19737
gpg_allow_expired_keys: 1

--- |
  # This part of the file contains options written in perl
  use IO::CaptureOutput qw(capture_exec);
  (
    var_p => {
      nightly_torbrowser_version => sub {
        state $version = '';
        return $version if $version;
        my (undef, undef, undef, $day, $mon, $year) = gmtime;
        $version = sprintf("tbb-nightly.%u.%02u.%02u", $year + 1900, $mon + 1, $day);
        return $version;
      },
      nightly_torbrowser_incremental_from => sub {
        my ($project, $options) = @_;
        my $nightly_dir = project_config($project, 'basedir', $options) . '/nightly';
        my $current_version = project_config($project, 'var/torbrowser_version', $options);
        use Path::Tiny;
        return [] unless -d $nightly_dir;
        my @dirs = sort map { $_->basename } path($nightly_dir)->children(qr/^tbb-nightly\./);
        my $nb_incr = project_config($project, ['var', 'max_torbrowser_incremental_from'], $options);
        my @res;
        while ($nb_incr > 0) {
          my $dir = pop @dirs;
          last unless $dir;
          next if $dir eq $current_version;
          $nb_incr--;
          push @res, $dir;
        }
        return [@res];
      },
    },
  )


code:
---
### This file is used to override options from rbm.conf to adapt them
### to your local setup.
###
### Copy this file as rbm.local.conf to enable it, and uncomment the
### options you want to modify.

### The tmp_dir option defines where temporary files are stored. The
### builds are made from this directory, so using a directory on a fast
### disk can improve build time. By default we are using a tmp directory
### under the tor-browser-build directory.
#tmp_dir: /tmp

### The debug option defines whether a debugging shell should be opened
### automatically in the build directory/container in case of build
### failure. If you are doing automated builds, you might want to disable
### this.
#debug: 0

### The build_log option defines in which file the build logs of each
### component are stored. If you set it to '-' the logs are output on
### stdout and stderr.
#build_log: '-'

### By default, the logs from previous builds are kept in the log files.
### If you set build_log_append to 0, then previous logs are cleaned
### when starting a new build.
#build_log_append: 0

### The num_procs option can be used to select the number of
### build processes to run simultaneously. You can also use the
### RBM_NUM_PROCS environment variable. The default is the number of
### processing units available, as returned by `nproc`.
#num_procs: 8

buildconf:
  buildconf: 1

  ### The buildconf/git_signtag_opt option is useful when you tag a release.
  ### It is used to set the 'git tag' argument to select the keyid for
  ### signing the tag.
  #git_signtag_opt: '-u keyid'

var:
  local_conf: 1

  ### The var/sign_build option defines if you want to sign the
  ### sha256sums-unsigned-build.txt and
  ### sha256sums-unsigned-build.incrementals.txt files with gpg.
  #sign_build: 1

  ### The var/sign_build_gpg_opts option can be used to define some gpg
  ### options to select the key to use to sign the sha256sums-unsigned-build.txt
  ### and sha256sums-unsigned-build.incrementals.txt files.
  #sign_build_gpg_opts: '--local-user XXXXXXXX'

  ### The clean configuration is used by the cleaning script to find the
  ### branches and build targets you are using, to compute the list of
  ### files that should be kept.
  ###
  ### If you only do alpha builds for all platforms, you can use the
  ### following configuration:
  #clean:
  #  HEAD:
  #    - project: release
  #      target:
  #        - alpha
  #        - torbrowser-all
  #
  ### If you are doing 'release' builds in the maint-7.0 branch and
  ### 'alpha' builds in the main branch, you can use the following
  ### configuration:
  #clean:
  #  main:
  #    - project: release
  #      target:
  #        - alpha
  #        - torbrowser-all
  #  maint-7.0:
  #    - project: release
  #      target:
  #        - release
  #        - torbrowser-all

targets:

  ### testbuild is based on alpha by default. Uncomment this if you want it
  ### to be based on nightly.
  #torbrowser-testbuild:
  #  - testbuild
  #  - nightly

  testbuild:
    var:
      testbuild: 1

      ### Uncomment this if you want to create mar files in your test build.
      #build_mar: 1

      ### Uncomment this if you want to enable the merge_aars step in your test
      ### build, meaning that GeckoView will be compiled for all architectures.
      #android_single_arch: 0

  nightly:

    ### By default 'fetch' is set to 1 for nightly builds, meaning that new
    ### commits will be fetched automatically during each build. You can
    ### disable this during development if you want to do rebuilds to test
    ### a specific change, but don't want rebuilds caused by unrelated
    ### changes, or if you want to decide at which point new commits are
    ### fetched. When 'fetch' is set to 'if_needed', new commits will only
    ### be fetched if the selected commit (or branch, or tag) is not present,
    ### which means that existing branches won't be updated. In that case
    ### you can fetch new commits by running 'make fetch'.
    #fetch: 'if_needed'

# vim: filetype=yaml sw=2


code:
#!/bin/sh

# Copyright (c) 2019, The Tor Project, Inc.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met:
#
#     * Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
#
#     * Redistributions in binary form must reproduce the above
# copyright notice, this list of conditions and the following disclaimer
# in the documentation and/or other materials provided with the
# distribution.
#
#     * Neither the names of the copyright owners nor the names of its
# contributors may be used to endorse or promote products derived from
# this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

# Usage:
# 1) Let OSSLSIGNCODE point to your osslsigncode binary
# 2) Change into the directory containing the .exe files and the sha256sums-unsigned-build.txt
# 3) Run /path/to/authenticode_check.sh

if [ -z "$OSSLSIGNCODE" ]
then
  echo "The path to your osslsigncode binary is missing!"
  exit 1
fi

UNSIGNED_BUNDLES=0
BADSIGNED_BUNDLES=0

mkdir tmp

for f in `ls *.exe`; do
  SHA256_TXT=`grep "$f" sha256sums-unsigned-build.txt`

  # Test 1: Is the .exe file still unsigned? I.e. does its SHA-256 sum still
  # match the one we had before we signed the .exe file? If so, notify us
  # later and exit.
  if [ "$SHA256_TXT" = "`sha256sum $f`" ]
  then
    echo "$f has still the SHA-256 sum of the unsigned bundle!"
    UNSIGNED_BUNDLES=`expr $UNSIGNED_BUNDLES + 1`
  fi

  # Test 2: Do we get the old SHA-256 sum after stripping the authenticode
  # signature? If not, notify us later and exit.
  if [ "$UNSIGNED_BUNDLES" = "0" ]
  then
    # At least we seem to have attempted to sign the bundle. Let's see if we
    # succeeded by stripping the signature. This behavior is reproducible.
    # Thus, we know if we don't get the same SHA-256 sum we did not sign the
    # bundle correctly.
    echo "Trying to strip the authenticode signature of $f..."
    ${OSSLSIGNCODE} remove-signature $f tmp/$f
    cd tmp
    if ! [ "$SHA256_TXT" = "`sha256sum $f`" ]
    then
      echo "$f does not have the SHA-256 sum of the unsigned bundle!"
      BADSIGNED_BUNDLES=`expr $BADSIGNED_BUNDLES + 1`
    fi
    rm $f
    cd ..
  fi
done

rm -rf tmp/

if ! [ "$UNSIGNED_BUNDLES" = "0" ]
then
  echo "We got $UNSIGNED_BUNDLES unsigned bundle(s), exiting..."
  exit 1
fi

if ! [ "$BADSIGNED_BUNDLES" = "0" ]
then
  echo "We got $BADSIGNED_BUNDLES badly signed bundle(s), exiting..."
  exit 1
fi

echo "The signatures are fine."
exit 0


code:
#!/bin/sh

# Copyright (c) 2021, The Tor Project, Inc.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met:
#
#     * Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
#
#     * Redistributions in binary form must reproduce the above
# copyright notice, this list of conditions and the following disclaimer
# in the documentation and/or other materials provided with the
# distribution.
#
#     * Neither the names of the copyright owners nor the names of its
# contributors may be used to endorse or promote products derived from
# this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

# Usage:
# 1) Let OSSLSIGNCODE point to your osslsigncode binary
# 2) Change into the directory containing the .exe files and the sha256sums-unsigned-build.txt
# 3) Run /path/to/authenticode_verify_timestamp.sh

if [ -z "$OSSLSIGNCODE" ]
then
  echo "The path to your osslsigncode binary is missing!"
  exit 1
fi

#set -x

VERIFIED_PACKAGES=0
MISSING_TIMESTAMP=0

for f in `ls *.exe`; do
  echo -n "$f timestamped: "

  ${OSSLSIGNCODE} extract-signature -pem -in $f -out $f.sigs 1>/dev/null
  ts=`openssl pkcs7 -print -in $f.sigs | grep -A 227 unauth_attr`
  ts_len=`openssl pkcs7 -print -in $f.sigs | grep -A 227 unauth_attr | wc -l`
  rm $f.sigs

  if [ $ts_len -ne 228 ]; then
    echo "timestamp format changed. Expected 228 lines, but received $ts_len"
  fi

  missing_attrs=0
  # Random selection. We can choose better ones later.
  for exp in "d=1 hl=2 l= 9 prim: OBJECT :pkcs7-signedData" \
             "d=4 hl=2 l= 11 prim: OBJECT :id-smime-ct-TSTInfo" \
             "d=9 hl=2 l= 40 prim: PRINTABLESTRING :DigiCert SHA2 Assured ID Timestamping CA" \
             "d=9 hl=2 l= 23 prim: PRINTABLESTRING :DigiCert Timestamp 2021" \
             "d=7 hl=2 l= 9 prim: OBJECT :signingTime"; do
    #echo "Checking '$exp'"
    if ! `echo $ts | grep -q "$exp"`; then
      missing_attrs=`expr $missing_attrs + 1`
      echo "no: missing attribute: $exp"
    fi
  done
  if [ $missing_attrs -ne 0 ]; then
    MISSING_TIMESTAMP=`expr $MISSING_TIMESTAMP + 1`
  else
    echo yes
  fi

  CHECKED_PACKAGES=`expr ${CHECKED_PACKAGES} + 1`
done

if [ "${MISSING_TIMESTAMP}" -ne 0 ]; then
  echo "${MISSING_TIMESTAMP} packages not timestamped."
  exit 1
fi

if [ "${CHECKED_PACKAGES}" -ne `ls *.exe | wc -l` ]; then
  echo "Some packages were not verified!."
  exit 1
fi

echo "Successfully verified are ${CHECKED_PACKAGES} timestamped"

exit 0