### A Pluto.jl notebook ###
# v0.17.1

using Markdown
using InteractiveUtils

# ╔═╡ 0829eb90-1d74-46b6-80ec-482a2b71c6fe
using PlutoUI, Flux,LinearAlgebra

# ╔═╡ f360390b-1d15-4443-aad6-a5800a6ba776
using BSON: @save,@load

# ╔═╡ 9a1ebef5-ed53-4e0b-89e7-20a20819b032
using Dates,BSON

# ╔═╡ eb25eb64-eb6c-48e0-8db6-d9705e397689
using Plots,Zygote #need to include zygote to be able to save and export data

# ╔═╡ fe446c7e-ed8c-4a0b-8bc9-024806f9f352
md"""
$(Dates.now())
"""

# ╔═╡ 66f0e667-d722-4e1e-807b-84a39cbc41b1
md"""
# Bellman Residual Minimization of Operators


"""

# ╔═╡ 9fa41b7c-1923-4c1e-bfc6-20ce4a1a2ede
md"""
Define the basic dimensions of the model
 - Number of Constellations: $(const N_constellations = 4)
 - Number of Debris Trackers: $(const N_debris = 1)
 - Number of Overall States: $(const N_states = N_constellations + N_debris)
"""

# ╔═╡ 0d209540-29ad-4b2f-9e91-fac2bbee47ff
md"""
## Describe the physics of the world

Three key functions
 - Survival function, describing how colisions occur
 - Debris Evolution
 - Constellation Satellite Stocks Evolution
"""

# ╔═╡ f8779824-9d59-4458-926f-10beb3cd3866
abstract type TransitionRule end

# ╔═╡ 9b1c2f62-ec19-4667-8f93-f8b52750e317
	md"""
	### Parameterize the physical world
	"""

# ╔═╡ 90446134-4e45-471c-857d-4e165e51937a
begin
	begin
		abstract type PhysicalParameters end
		
		#setup physical model
		struct BasicModel <: PhysicalParameters
		    #rate at which debris hits satellites
		    debris_collision_rate::Real
		    #rate at which satellites of different constellations collide
		    satellite_collision_rates::Matrix{Float64}
		    #rate at which debris exits orbits
		    decay_rate::Real
		    #rate at which satellites
		    autocatalysis_rate::Real
		    #ratio at which a collision between satellites produced debris
		    satellite_collision_debris_ratio::Real
		    #Ratio at which launches produce debris
		    launch_debris_ratio::Real
		end
	
			#Getting loss parameters together.
		loss_param = 2e-3;
		loss_weights = loss_param*(ones(N_constellations,N_constellations) - LinearAlgebra.I);
		

		#Todo, wrap physical model as a struct with the parameters
		bm = BasicModel(
		    loss_param
		    ,loss_weights
		    ,0.01
		    ,0.001
		    ,5.0
		    ,0.05
		)
	end
	

end

# ╔═╡ 5b45b29e-f0f4-41e9-91e7-d444687feb4e
#implement survival function
function survival(
		stocks::Array{Float32}
		,debris::Array{Float32}
		,physical_model::BasicModel
	)	
    return exp.(
		-(physical_model.satellite_collision_rates .+ physical_model.decay_rate) * stocks 
		.- (physical_model.debris_collision_rate*debris)
	) #issue with an accidental negative in decay rate.
end

# ╔═╡ 152f3a3c-a565-41bb-8e59-6ab0d2315ffb
begin
	#debris evolution 
	struct BasicDebrisEvolution <: TransitionRule
		physical_model::BasicModel
	end
	function (self::BasicDebrisEvolution)(
			stocks::Array{Float32}
			,debris::Array{Float32}
			,launches::Array{Float32}
		)
	    #get changes in debris from natural dynamics
	    natural_debris_dynamics = (1-self.physical_model.decay_rate + self.physical_model.autocatalysis_rate) * debris 
	    
	    #get changes in debris from satellite loss
	    satellite_loss_debris = self.physical_model.satellite_collision_debris_ratio * (1 .- survival(stocks,debris,self.physical_model))'*stocks 
	    
	    #get changes in debris from launches
	    launch_debris = self.physical_model.launch_debris_ratio*sum(launches)
	    
	    #return total debris level
	    return natural_debris_dynamics .+ satellite_loss_debris .+ launch_debris
	end
end

# ╔═╡ 25ac9438-2b1d-4f6b-9ff1-1695e1d52b51
begin
	#stock update rules
	struct BasicStockEvolution <: TransitionRule
		physical_model::BasicModel
	end
	function (self::BasicStockEvolution)(
			stocks::Array{Float32}
			,debris::Array{Float32}
			,launches::Array{Float32}
			
	)
	    return LinearAlgebra.diagm(survival(stocks,debris,self.physical_model) .- self.physical_model.decay_rate)*stocks + launches
	end
end
#TODO: investigate combining the stocks and debris using some sort of state struct <: State type. Maybe combine with the physical model?

# ╔═╡ 6bf01e30-d054-4a98-9e0d-58d7da4e5524
begin # build the transition models
	H = BasicDebrisEvolution(bm)
	G = BasicStockEvolution(bm)
end;

# ╔═╡ 29ff1777-d276-4e8f-8582-4ca191f2e2ff
md"""
## Setup Neural Networks
"""

# ╔═╡ f7aabe43-9a2c-4fe0-8099-c29cdf66566c
function value_function_generator(number_params=32)
	return Flux.Chain(
	    Flux.Parallel(vcat
		        #parallel joins together stocks and debris, after a little bit of preprocessing
		        ,Flux.Chain(
					Flux.Dense(N_constellations, number_params*2,Flux.relu)
		            ,Flux.Dense(number_params*2, number_params*2,Flux.σ)
		        )
		        ,Flux.Chain(
					Flux.Dense(N_debris, number_params,Flux.relu)
		            ,Flux.Dense(number_params, number_params,Flux.σ)
				)
			)
		    #Apply some transformations to the preprocessed data.
			,Flux.Dense(number_params*3,number_params,Flux.σ)
			,Flux.Dense(number_params,number_params,Flux.σ)
			,Flux.Dense(number_params,1)
		)

end

# ╔═╡ d816b252-bdca-44ba-ac5c-cb21163a1e9a
function planner_policy_function_generator(number_params=32)
	return Flux.Chain(
	    Flux.Parallel(vcat
		        #parallel joins together stocks and debris
		        ,Flux.Chain(
					Flux.Dense(N_constellations, number_params*2,Flux.relu)
		            ,Flux.Dense(number_params*2, number_params*2,Flux.σ)
		        )
		        ,Flux.Chain(
					Flux.Dense(N_debris, number_params,Flux.relu)
		            ,Flux.Dense(number_params, number_params)
				)
			)
		    #Apply some transformations
			,Flux.Dense(number_params*3,number_params,Flux.σ)
			,Flux.Dense(number_params,number_params,Flux.σ)
			,Flux.Dense(number_params,N_constellations,Flux.relu)
		)

end

# ╔═╡ e4e2f50e-05fc-42da-a6d3-d62c4f901d84
function operator_policy_function_generator(number_params=32)
	return Flux.Chain(
	    Flux.Parallel(vcat
		        #parallel joins together stocks and debris
		        ,Flux.Chain(
					Flux.Dense(N_constellations, number_params*2,Flux.relu)
		            ,Flux.Dense(number_params*2, number_params*2,Flux.tanh)
		        )
		        ,Flux.Chain(
					Flux.Dense(N_debris, number_params,Flux.relu)
		            ,Flux.Dense(number_params, number_params)
				)
			)
		    #Apply some transformations
			,Flux.Dense(number_params*3,number_params,Flux.tanh)
			,Flux.Dense(number_params,number_params,Flux.tanh)
			,Flux.Dense(number_params,1,x -> Flux.relu.(sinh.(x)))
		)

end

# ╔═╡ ae6681e0-c796-4145-a313-75f74b4993ad
#add branch generator
begin #move to module
	#= TupleDuplicator
	This is used to create a tuple of size n with deepcopies of any object x
	=#
	struct TupleDuplicator
		n::Int
	end
	(f::TupleDuplicator)(x) = tuple([deepcopy(x) for i=1:f.n]...)

	#=
	This generates a policy function full of branches with the properly scaled sides
	=#
	struct BranchGenerator
		n::UInt8 
		#limit to 2^8 operators
	end
	function (b::BranchGenerator)(branch::Flux.Chain,join_fn::Function) 
		# used to deepcopy the branches and duplicate the inputs in the returned chain
		f = TupleDuplicator(b.n)
		
		return Flux.Chain(f,Flux.Parallel(join_fn,f(branch)))
	end
end

# ╔═╡ bbca5143-f314-40ea-a20e-8a043272e362
md"""
# Defining economic parameters and payoff functions
"""

# ╔═╡ 340da189-f443-4376-a82d-7699a21ab7a2
abstract type EconomicModel end

# ╔═╡ 206ac4cc-5102-4381-ad8a-777b02dc4d5a
begin 
	#basic linear model
	struct LinearModel <: EconomicModel
		β::Float32
		payoff_array::Array{Float32}
		policy_costs::Array{Float32}
	end
	function (em::LinearModel)(
		s::Vector{Float32}
		,d::Vector{Float32}
		,a::Vector{Float32}
		)
		return em.payoff_array*s - em.policy_costs*a
	end
end

# ╔═╡ eebb8706-a431-4fd1-b7a5-40f07a63d5cb
begin 
	#basic CES model
	struct CES <: EconomicModel
		β::Float32
		r::Float32 #elasticity of subsititution
		payoff_array::Array{Float32}
		policy_costs::Array{Float32}
		debris_costs::Array{Float32}
	end
	function (em::CES)(
		s::Vector{Float32}
		,d::Vector{Float32}
		,a::Vector{Float32}
		)

		#issue here with multiplication
		r1 = em.payoff_array .* (s.^em.r) 
		r2 = - em.debris_costs .* (d.^em.r) 
		r3 = - em.policy_costs .* (a.^em.r)
		return (r1 + r2 + r3) .^ (1/em.r)

	end


	#basic CRRA
	struct CRRA <: EconomicModel
		β::Float32
		σ::Float32 #elasticity of subsititution
		payoff_array::Array{Float32}
		policy_costs::Array{Float32}
		debris_costs::Array{Float32}
	end
	function (em::CRRA)(
		s::Vector{Float32}
		,d::Vector{Float32}
		,a::Vector{Float32}
		)
		#issue here
		core = (em.payoff_array*s - em.debris_costs*d - em.policy_costs).^(1 - em.σ)

		return (core-1)/(1-em.σ)
	end
end

# ╔═╡ b433a7ec-8264-48d6-8b95-53d2ec4bad05
md"""
### examples of parameter models
"""

# ╔═╡ 65e0b1fa-d5e1-4ff6-8736-c9d6b5f40150
begin
	em1_a = LinearModel(0.95, [1.0 0 0 0], [5 0 0 0])
	em1_b = LinearModel(0.95, [0 1.0 0 0], [0 5 0 0])
	em1_c = LinearModel(0.95, [0 0 1.0 0], [0 0 5 0])
	em1_d = LinearModel(0.95, [0 0 0 1.0], [0 0 0 5])
	#=
	This is the most basic profit model
	
	You earn 1 per operating satellite and it costs 5 per launch.
	Only interaction is through debris.
	=#
end

# ╔═╡ 19ccfc3a-6dbb-4c64-bf03-e2e219ef0efe
begin
	em2_a = LinearModel(0.95, [1 -0.02 -0.02 0], [5.0 0 0 0])
	em2_b = LinearModel(0.95, [-0.02 1 -0.02 0], [0.0 5 0 0])
	em2_c = LinearModel(0.95, [0 -0.02 1 -0.02], [0.0 0 5 0])
	em2_d = LinearModel(0.95, [0 -0.02 -0.02 1], [0.0 0 0 5])
	#=
	This is a simple addition to the basic model, where you lose some benefit based 
	the size of your competitor's satellites.
	Constellations interact throuch debris and imposing costs on one another.
	=#
end

# ╔═╡ dc614254-c211-4552-b985-03020bfc5ab3
begin
	em3_a = CES(0.95,0.6,[1 0 0 0], [5 0 0 0], Vector([0.002]))
	em3_b = CES(0.95,0.6,[0 1 0 0], [0 5 0 0], Vector([0.002]))
	em3_c = CES(0.95,0.6,[0 0 1 0], [0 0 5 0], Vector([0.002]))
	em3_d = CES(0.95,0.6,[0 0 0 1], [0 0 0 5], Vector([0.002]))
	#=
	This is a variation on a CES model.
	
	The model is CES the relationship between payoffs and debris.
	In this particular specification, the only interaction is in debris
	=#
end

# ╔═╡ 128ab84e-9682-4c4e-a301-1e27d9c199a4
begin
	em4_a = CRRA(0.95,0.6,[1 0 0 0], [5 0 0 0], Vector([0.002]))
	em4_b = CRRA(0.95,0.6,[0 1 0 0], [0 5 0 0], Vector([0.002]))
	em4_c = CRRA(0.95,0.6,[0 0 1 0], [0 0 5 0], Vector([0.002]))
	em4_d = CRRA(0.95,0.6,[0 0 0 1], [0 0 0 5], Vector([0.002]))
end

# ╔═╡ 52eb1934-77b1-4da3-a36a-afb951f76784
#TODO: create a generator for economic models

# ╔═╡ 717a07a4-5254-40aa-8244-1a2010fedec8


# ╔═╡ 5946daa3-4608-43f3-8933-dd3eb3f4541c
md"""
# Loss function specification
"""

# ╔═╡ 9d4a668a-23e3-4f36-86f4-60e242caee3b
begin #testing data
	s1 = ones(Float32,N_constellations)
	d1 = ones(Float32,N_debris)
	
end

# ╔═╡ aa079b60-af16-4824-8a1d-b0c68a0cacbc
begin
	#test economic models
	em1_a(s1,d1,s1)
	em2_a(s1,d1,s1)
	#em3_a(s1,d1,s1) #ERROR
	#em4_a(s1,d1,s1) #ERROR
end

# ╔═╡ 382b6dee-5fa7-4ca1-b804-4b50b0fb65a7
begin
	#=
	This struct organizes information about a given constellation operator
	Used to provide an interable loss function for training

	=#
	struct ConstellationOperatorLoss
		#econ model describing operator
		econ_model::EconomicModel
		#Operator's value and policy functions, as well as which parameters the operator can train.
		operator_value_fn::Flux.Chain
		collected_policies::Flux.Chain #this is held by all operators
		operator_policy_params::Flux.Params
		#Transition functions
		debris_transition::BasicDebrisEvolution
		stocks_transition::BasicStockEvolution
	end
	# overriding function to calculate operator loss
	function (operator::ConstellationOperatorLoss)(
		s::Vector{Float32}
		,d::Vector{Float32}
	)
		

		#get actions
		a = operator.collected_policies((s,d))
	
		#get updated stocks and debris
		s′ = operator.stocks_transition(s ,d ,a)
		d′ = operator.debris_transition(s ,d ,a)
	
		
		bellman_residuals = operator.operator_value_fn((s,d)) - operator.econ_model(s,d,a) - operator.econ_model.β * operator.operator_value_fn((s′,d′))
		
		maximization_condition = - operator.econ_model(s ,d ,a) - operator.econ_model.β * operator.operator_value_fn((s′,d′))
	
		return Flux.mae(bellman_residuals.^2 ,maximization_condition)
	end
	
	function (operator::ConstellationOperatorLoss)(
		s::Vector{Float32}
		,d::Vector{Float32}
		,policy::Flux.Chain #allow for another policy to be subsituted
	)
		

		#get actions
		a = policy((s,d))
	
		#get updated stocks and debris
		s′ = operator.stocks_transition(s ,d ,a)
		d′ = operator.debris_transition(s ,d ,a)
	
		
		bellman_residuals = operator.operator_value_fn((s,d)) - operator.econ_model(s,d,a) - operator.econ_model.β * operator.operator_value_fn((s′,d′))
		
		maximization_condition = - operator.econ_model(s ,d ,a) - operator.econ_model.β * operator.operator_value_fn((s′,d′))
	
		return Flux.mae(bellman_residuals.^2 ,maximization_condition)
	end
end

# ╔═╡ dc855793-d234-4835-8674-bf56aa0ad0db
begin
	
	#do the same thing with the planner's problem
	struct PlannerLoss
		#=
		Ideally, with just a well formed PlannerLoss and the training functions below, we should be able to train the approximation.

		There is an issue with appropriately training the value functions.
		In this case, it is not happening...
		=#
		β::Float32
		
		operators::Array{ConstellationOperatorLoss}
		
		policy::Flux.Chain
		policy_params::Flux.Params
		value::Flux.Chain
		value_params::Flux.Params
		
		debris_transition::BasicDebrisEvolution
		stocks_transition::BasicStockEvolution
	end
	function (planner::PlannerLoss)(
		s::Vector{Float32}
		,d::Vector{Float32}
	) 
		a = planner.policy((s ,d))
		#get updated stocks and debris
		s′ = planner.stocks_transition(s ,d ,a)
		d′ = planner.debris_transition(s ,d ,a)
		
		
		
			#calculate the total benefit from each of the models
		benefit = sum([ co.econ_model(s ,d ,a) for co in planner.operators])
			#issue here with mutating. Maybe generators/list comprehensions?
		
		
		bellman_residuals = planner.value((s,d)) - benefit - planner.β .* planner.value((s′,d′))

		maximization_condition = - benefit - planner.β .* planner.value((s′,d′))
		
		return Flux.mae(bellman_residuals.^2 ,maximization_condition)
	end
end

# ╔═╡ cd55e232-493d-4849-8bd7-b0ba85e21bab
md"""
# Set up Operators and Planner
"""

# ╔═╡ 176981f2-b7f5-4a0f-aae0-940e1db778c7
#=
Setup various policy/planning functions
=#
begin
	bg4 = BranchGenerator(N_constellations)

	#create identically structured policiy functions
	operators_policy = bg4(operator_policy_function_generator(),vcat)
	planners_policy = bg4(operator_policy_function_generator(),vcat)

	#create the planners_value function
	planners_value = value_function_generator(64)
end;

# ╔═╡ 08ef7fbf-005b-40b5-acde-f42750c04cd3
begin #setup operators
	#Create policies
	
	const operator_array = [ 
		#first operator
		ConstellationOperatorLoss(		
			em2_a
			,value_function_generator()
			,operators_policy #this is held by all operators
			,params(operators_policy[2][1]) #first operator gets first branch of params
			,H
			,G
		)
		,ConstellationOperatorLoss(		
			em2_b
			,value_function_generator()
			,operators_policy #this is held by all operators
			,params(operators_policy[2][2]) #first operator gets first branch of params
			,H
			,G
		)
		,ConstellationOperatorLoss(		
			em2_c
			,value_function_generator()
			,operators_policy #this is held by all operators
			,params(operators_policy[2][3]) #first operator gets first branch of params
			,H
			,G
		)
		,ConstellationOperatorLoss(		
			em2_d
			,value_function_generator()
			,operators_policy #this is held by all operators
			,params(operators_policy[2][4]) #first operator gets first branch of params
			,H
			,G
		)
	]
	
	
	#sanity check time
	@assert length(operator_array) == N_constellations "Mismatch in predetermined number of constellations and the number of operators initialized"
end

# ╔═╡ 1eae5450-f9ef-49ec-9dcd-48c025562ecf
pl = PlannerLoss(
		0.95
		,operator_array
		,planners_policy
		,params(planners_policy)
		,planners_value
		,params(planners_value)
		,H
		,G
)

# ╔═╡ f68e2322-937d-44ce-8aa9-757b27b00603
pl(s1,d1)

# ╔═╡ 5abebc1a-370c-4f5f-8826-dc0b143d5166
md"""
# Training loop
"""

# ╔═╡ a20959be-65e4-4b69-9521-503bc59f0854
begin
	struct UniformDataConstructor
		N::UInt64
		satellites_bottom::Float32
		satellites_top::Float32
		debris_bottom::Float32
		debris_top::Float32
	end
	(dc::UniformDataConstructor)() = [(rand(dc.satellites_bottom:dc.satellites_top, N_constellations),rand(dc.debris_bottom:dc.debris_top, N_debris)) for n=1:dc.N]

	#create a data constructor
	dc = UniformDataConstructor(20_000,0,200,0,4000)

	#get a bit of test data
	data1 = dc()
end

# ╔═╡ 6bf8d29a-7990-4e91-86e6-d9894ed3db27
#optimizer
opt = Flux.Optimise.ADAM()

# ╔═╡ e6654ee2-776c-4b26-a5a3-324188062966
pl(s1,d1)[1]

# ╔═╡ 2b115364-a8ce-4eb9-a324-7ac213061b83
begin
	N_epoch = 6
	data_gen = UniformDataConstructor(2_000,0,200,0,4000)
end

# ╔═╡ 0679c91b-9824-4017-83fd-4001dc8c2d54
function error(pl,data)
	total_error = 0.0f0
	for d in data
		total_error += pl(d...)
	end
	return total_error
end

# ╔═╡ 943a2fb9-7d30-434d-ab1f-8a4b9b1af02b
#=
TODO
 - rewrite things below to use smaller batches and more epochs
 - ad some sort of printed record of training.
=#

# ╔═╡ 30417194-6cd1-4e10-9e25-1fa1c0761b9a
begin
	errors = []
	for i in 1:N_epoch
		data = data_gen()
		Flux.train!(pl, pl.policy_params, data, opt)
		Flux.train!(pl, pl.value_params, data, opt)
		append!(errors,error(pl,data1)/200)
	end
end

# ╔═╡ 7f42b201-01ec-4d63-b8de-92e735f28e4a
errors

# ╔═╡ baac6c78-e3cc-4b4f-8945-2bb4109f1489
history = md"""
7941.13

6272.03

6897.89

6238.97

5648.66

6900.41

6361.98

5340.05

4730.78

6310.38

6098.89

5752.16

5390.08

5574.34

5410.49

5254.8

5318.32

5138.24

5465.25

5841.54

5990.18

5205.41

5597.91

5085.95

4549.48

3920.5

4446.06

3638.19

4866.59

4426.99

4734.75

4747.1

4537.03

4113.21

4111.0

3444.36

3823.89

3931.36

3925.13

4807.3

3818.42

3912.15

4325.21

3327.24

3437.77

3812.65

4322.85

3775.58

5246.89

3168.14

3370.22

3707.81

2777.32

3615.78

4224.25

3605.77

3126.01

4204.4

3418.72

2995.28

2919.95

3436.53

8728.08

3466.83

5421.07

3637.34
""";

# ╔═╡ 65cf41b8-adf4-42b9-82dc-d2fbafccda81
begin
	model_name = "$(Dates.now())_planner.bson"
	@save model_name pl
end

# ╔═╡ ca1e02b6-8c78-4a94-8c7c-7d9ec6cffbca
#reload model
tpl = BSON.load(model_name, @__MODULE__)[:pl]

# ╔═╡ 08820cf2-38cc-4451-9b6e-91475c396d6e
pl

# ╔═╡ 188deb3a-18db-4d10-a4e8-89c6fd6e9302
md"""
## Proto Kessler Region Analysis
"""

# ╔═╡ 3b58537f-201b-4dc2-99e8-faabd9ce400f
#gr() #set backend
plotly()

# ╔═╡ 109519b1-096f-46a0-91a7-6f0e5508a947
begin
	kessler_field = []
	stocks = []
	debris = []
	debris_updates = []
	constellatin_index=1

	#get average stocks
	s̄ = zero(data1[1][1])
	#process data
	for (s,d) in data1
		s̄ += s
	end
	s̄ = s̄/200
	
	for (s,d) in data1
		ŝ = s̄
		ŝ[constellatin_index] = s[constellatin_index]
		
		â = pl.policy((ŝ,d))


	
		d′ = H(ŝ,d,â)
	
		ϵ = d′-d
	
		append!(kessler_field, ϵ)
		append!(stocks, s[1])
		append!(debris, d)
		append!(debris_updates, d′)
	end
end

# ╔═╡ 9ff075a3-cea6-466a-bc7d-ee2f85dc226e
length(kessler_field),length(stocks),length(debris)

# ╔═╡ c85467b1-03f6-40da-8138-886245e1f29f
contour(stocks
	,debris
	,kessler_field
	,xlabel="Constellation #$(constellatin_index) stocks"
	,ylabel="Debris levels"
	,title="Debris transition levels"
	,color=:blues
)

# ╔═╡ 4f87d6c3-ef9d-4930-9a6a-acaae31cbb82
debris

# ╔═╡ 5c909bf7-9500-4ffa-a65d-91ddd155f675
debris_updates #issue here

# ╔═╡ 00000000-0000-0000-0000-000000000001
PLUTO_PROJECT_TOML_CONTENTS = """
[deps]
BSON = "fbb218c0-5317-5bc6-957e-2ee96dd4b1f0"
Dates = "ade2ca70-3891-5945-98fb-dc099432e06a"
Flux = "587475ba-b771-5e3f-ad9e-33799f191a9c"
LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
Plots = "91a5bcdd-55d7-5caf-9e0b-520d859cae80"
PlutoUI = "7f904dfe-b85e-4ff6-b463-dae2292396a8"
Zygote = "e88e6eb3-aa80-5325-afca-941959d7151f"

[compat]
BSON = "~0.3.4"
Flux = "~0.12.8"
Plots = "~1.23.6"
PlutoUI = "~0.7.18"
Zygote = "~0.6.30"
"""

# ╔═╡ 00000000-0000-0000-0000-000000000002
PLUTO_MANIFEST_TOML_CONTENTS = """
# This file is machine-generated - editing it directly is not advised

[[AbstractFFTs]]
deps = ["LinearAlgebra"]
git-tree-sha1 = "485ee0867925449198280d4af84bdb46a2a404d0"
uuid = "621f4979-c628-5d54-868e-fcf4e3e8185c"
version = "1.0.1"

[[AbstractPlutoDingetjes]]
deps = ["Pkg"]
git-tree-sha1 = "0ec322186e078db08ea3e7da5b8b2885c099b393"
uuid = "6e696c72-6542-2067-7265-42206c756150"
version = "1.1.0"

[[AbstractTrees]]
git-tree-sha1 = "03e0550477d86222521d254b741d470ba17ea0b5"
uuid = "1520ce14-60c1-5f80-bbc7-55ef81b5835c"
version = "0.3.4"

[[Adapt]]
deps = ["LinearAlgebra"]
git-tree-sha1 = "84918055d15b3114ede17ac6a7182f68870c16f7"
uuid = "79e6a3ab-5dfb-504d-930d-738a2a938a0e"
version = "3.3.1"

[[ArgTools]]
uuid = "0dad84c5-d112-42e6-8d28-ef12dabb789f"

[[ArrayInterface]]
deps = ["Compat", "IfElse", "LinearAlgebra", "Requires", "SparseArrays", "Static"]
git-tree-sha1 = "e527b258413e0c6d4f66ade574744c94edef81f8"
uuid = "4fba245c-0d91-5ea0-9b3e-6abc04ee57a9"
version = "3.1.40"

[[Artifacts]]
uuid = "56f22d72-fd6d-98f1-02f0-08ddc0907c33"

[[BFloat16s]]
deps = ["LinearAlgebra", "Printf", "Random", "Test"]
git-tree-sha1 = "a598ecb0d717092b5539dbbe890c98bac842b072"
uuid = "ab4f0b2a-ad5b-11e8-123f-65d77653426b"
version = "0.2.0"

[[BSON]]
git-tree-sha1 = "ebcd6e22d69f21249b7b8668351ebf42d6dc87a1"
uuid = "fbb218c0-5317-5bc6-957e-2ee96dd4b1f0"
version = "0.3.4"

[[Base64]]
uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f"

[[Bzip2_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
git-tree-sha1 = "19a35467a82e236ff51bc17a3a44b69ef35185a2"
uuid = "6e34b625-4abd-537c-b88f-471c36dfa7a0"
version = "1.0.8+0"

[[CEnum]]
git-tree-sha1 = "215a9aa4a1f23fbd05b92769fdd62559488d70e9"
uuid = "fa961155-64e5-5f13-b03f-caf6b980ea82"
version = "0.4.1"

[[CUDA]]
deps = ["AbstractFFTs", "Adapt", "BFloat16s", "CEnum", "CompilerSupportLibraries_jll", "ExprTools", "GPUArrays", "GPUCompiler", "LLVM", "LazyArtifacts", "Libdl", "LinearAlgebra", "Logging", "Printf", "Random", "Random123", "RandomNumbers", "Reexport", "Requires", "SparseArrays", "SpecialFunctions", "TimerOutputs"]
git-tree-sha1 = "2c8329f16addffd09e6ca84c556e2185a4933c64"
uuid = "052768ef-5323-5732-b1bb-66c8b64840ba"
version = "3.5.0"

[[Cairo_jll]]
deps = ["Artifacts", "Bzip2_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "JLLWrappers", "LZO_jll", "Libdl", "Pixman_jll", "Pkg", "Xorg_libXext_jll", "Xorg_libXrender_jll", "Zlib_jll", "libpng_jll"]
git-tree-sha1 = "f2202b55d816427cd385a9a4f3ffb226bee80f99"
uuid = "83423d85-b0ee-5818-9007-b63ccbeb887a"
version = "1.16.1+0"

[[ChainRules]]
deps = ["ChainRulesCore", "Compat", "LinearAlgebra", "Random", "RealDot", "Statistics"]
git-tree-sha1 = "035ef8a5382a614b2d8e3091b6fdbb1c2b050e11"
uuid = "082447d4-558c-5d27-93f4-14fc19e9eca2"
version = "1.12.1"

[[ChainRulesCore]]
deps = ["Compat", "LinearAlgebra", "SparseArrays"]
git-tree-sha1 = "f885e7e7c124f8c92650d61b9477b9ac2ee607dd"
uuid = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4"
version = "1.11.1"

[[CodecZlib]]
deps = ["TranscodingStreams", "Zlib_jll"]
git-tree-sha1 = "ded953804d019afa9a3f98981d99b33e3db7b6da"
uuid = "944b1d66-785c-5afd-91f1-9de20f533193"
version = "0.7.0"

[[ColorSchemes]]
deps = ["ColorTypes", "Colors", "FixedPointNumbers", "Random"]
git-tree-sha1 = "a851fec56cb73cfdf43762999ec72eff5b86882a"
uuid = "35d6a980-a343-548e-a6ea-1d62b119f2f4"
version = "3.15.0"

[[ColorTypes]]
deps = ["FixedPointNumbers", "Random"]
git-tree-sha1 = "024fe24d83e4a5bf5fc80501a314ce0d1aa35597"
uuid = "3da002f7-5984-5a60-b8a6-cbb66c0b333f"
version = "0.11.0"

[[Colors]]
deps = ["ColorTypes", "FixedPointNumbers", "Reexport"]
git-tree-sha1 = "417b0ed7b8b838aa6ca0a87aadf1bb9eb111ce40"
uuid = "5ae59095-9a9b-59fe-a467-6f913c188581"
version = "0.12.8"

[[CommonSubexpressions]]
deps = ["MacroTools", "Test"]
git-tree-sha1 = "7b8a93dba8af7e3b42fecabf646260105ac373f7"
uuid = "bbf7d656-a473-5ed7-a52c-81e309532950"
version = "0.3.0"

[[Compat]]
deps = ["Base64", "Dates", "DelimitedFiles", "Distributed", "InteractiveUtils", "LibGit2", "Libdl", "LinearAlgebra", "Markdown", "Mmap", "Pkg", "Printf", "REPL", "Random", "SHA", "Serialization", "SharedArrays", "Sockets", "SparseArrays", "Statistics", "Test", "UUIDs", "Unicode"]
git-tree-sha1 = "dce3e3fea680869eaa0b774b2e8343e9ff442313"
uuid = "34da2185-b29b-5c13-b0c7-acf172513d20"
version = "3.40.0"

[[CompilerSupportLibraries_jll]]
deps = ["Artifacts", "Libdl"]
uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae"

[[Contour]]
deps = ["StaticArrays"]
git-tree-sha1 = "9f02045d934dc030edad45944ea80dbd1f0ebea7"
uuid = "d38c429a-6771-53c6-b99e-75d170b6e991"
version = "0.5.7"

[[DataAPI]]
git-tree-sha1 = "cc70b17275652eb47bc9e5f81635981f13cea5c8"
uuid = "9a962f9c-6df0-11e9-0e5d-c546b8b5ee8a"
version = "1.9.0"

[[DataStructures]]
deps = ["Compat", "InteractiveUtils", "OrderedCollections"]
git-tree-sha1 = "7d9d316f04214f7efdbb6398d545446e246eff02"
uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8"
version = "0.18.10"

[[DataValueInterfaces]]
git-tree-sha1 = "bfc1187b79289637fa0ef6d4436ebdfe6905cbd6"
uuid = "e2d170a0-9d28-54be-80f0-106bbe20a464"
version = "1.0.0"

[[Dates]]
deps = ["Printf"]
uuid = "ade2ca70-3891-5945-98fb-dc099432e06a"

[[DelimitedFiles]]
deps = ["Mmap"]
uuid = "8bb1440f-4735-579b-a4ab-409b98df4dab"

[[DiffResults]]
deps = ["StaticArrays"]
git-tree-sha1 = "c18e98cba888c6c25d1c3b048e4b3380ca956805"
uuid = "163ba53b-c6d8-5494-b064-1a9d43ac40c5"
version = "1.0.3"

[[DiffRules]]
deps = ["LogExpFunctions", "NaNMath", "Random", "SpecialFunctions"]
git-tree-sha1 = "3287dacf67c3652d3fed09f4c12c187ae4dbb89a"
uuid = "b552c78f-8df3-52c6-915a-8e097449b14b"
version = "1.4.0"

[[Distributed]]
deps = ["Random", "Serialization", "Sockets"]
uuid = "8ba89e20-285c-5b6f-9357-94700520ee1b"

[[DocStringExtensions]]
deps = ["LibGit2"]
git-tree-sha1 = "b19534d1895d702889b219c382a6e18010797f0b"
uuid = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae"
version = "0.8.6"

[[Downloads]]
deps = ["ArgTools", "LibCURL", "NetworkOptions"]
uuid = "f43a241f-c20a-4ad4-852c-f6b1247861c6"

[[EarCut_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
git-tree-sha1 = "3f3a2501fa7236e9b911e0f7a588c657e822bb6d"
uuid = "5ae413db-bbd1-5e63-b57d-d24a61df00f5"
version = "2.2.3+0"

[[Expat_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
git-tree-sha1 = "b3bfd02e98aedfa5cf885665493c5598c350cd2f"
uuid = "2e619515-83b5-522b-bb60-26c02a35a201"
version = "2.2.10+0"

[[ExprTools]]
git-tree-sha1 = "b7e3d17636b348f005f11040025ae8c6f645fe92"
uuid = "e2ba6199-217a-4e67-a87a-7c52f15ade04"
version = "0.1.6"

[[FFMPEG]]
deps = ["FFMPEG_jll"]
git-tree-sha1 = "b57e3acbe22f8484b4b5ff66a7499717fe1a9cc8"
uuid = "c87230d0-a227-11e9-1b43-d7ebe4e7570a"
version = "0.4.1"

[[FFMPEG_jll]]
deps = ["Artifacts", "Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "JLLWrappers", "LAME_jll", "Libdl", "Ogg_jll", "OpenSSL_jll", "Opus_jll", "Pkg", "Zlib_jll", "libass_jll", "libfdk_aac_jll", "libvorbis_jll", "x264_jll", "x265_jll"]
git-tree-sha1 = "d8a578692e3077ac998b50c0217dfd67f21d1e5f"
uuid = "b22a6f82-2f65-5046-a5b2-351ab43fb4e5"
version = "4.4.0+0"

[[FillArrays]]
deps = ["LinearAlgebra", "Random", "SparseArrays", "Statistics"]
git-tree-sha1 = "8756f9935b7ccc9064c6eef0bff0ad643df733a3"
uuid = "1a297f60-69ca-5386-bcde-b61e274b549b"
version = "0.12.7"

[[FixedPointNumbers]]
deps = ["Statistics"]
git-tree-sha1 = "335bfdceacc84c5cdf16aadc768aa5ddfc5383cc"
uuid = "53c48c17-4a7d-5ca2-90c5-79b7896eea93"
version = "0.8.4"

[[Flux]]
deps = ["AbstractTrees", "Adapt", "ArrayInterface", "CUDA", "CodecZlib", "Colors", "DelimitedFiles", "Functors", "Juno", "LinearAlgebra", "MacroTools", "NNlib", "NNlibCUDA", "Pkg", "Printf", "Random", "Reexport", "SHA", "SparseArrays", "Statistics", "StatsBase", "Test", "ZipFile", "Zygote"]
git-tree-sha1 = "e8b37bb43c01eed0418821d1f9d20eca5ba6ab21"
uuid = "587475ba-b771-5e3f-ad9e-33799f191a9c"
version = "0.12.8"

[[Fontconfig_jll]]
deps = ["Artifacts", "Bzip2_jll", "Expat_jll", "FreeType2_jll", "JLLWrappers", "Libdl", "Libuuid_jll", "Pkg", "Zlib_jll"]
git-tree-sha1 = "21efd19106a55620a188615da6d3d06cd7f6ee03"
uuid = "a3f928ae-7b40-5064-980b-68af3947d34b"
version = "2.13.93+0"

[[Formatting]]
deps = ["Printf"]
git-tree-sha1 = "8339d61043228fdd3eb658d86c926cb282ae72a8"
uuid = "59287772-0a20-5a39-b81b-1366585eb4c0"
version = "0.4.2"

[[ForwardDiff]]
deps = ["CommonSubexpressions", "DiffResults", "DiffRules", "LinearAlgebra", "NaNMath", "Preferences", "Printf", "Random", "SpecialFunctions", "StaticArrays"]
git-tree-sha1 = "ef3fec65f9db26fa2cf8f4133c697c5b7ce63c1d"
uuid = "f6369f11-7733-5829-9624-2563aa707210"
version = "0.10.22"

[[FreeType2_jll]]
deps = ["Artifacts", "Bzip2_jll", "JLLWrappers", "Libdl", "Pkg", "Zlib_jll"]
git-tree-sha1 = "87eb71354d8ec1a96d4a7636bd57a7347dde3ef9"
uuid = "d7e528f0-a631-5988-bf34-fe36492bcfd7"
version = "2.10.4+0"

[[FriBidi_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
git-tree-sha1 = "aa31987c2ba8704e23c6c8ba8a4f769d5d7e4f91"
uuid = "559328eb-81f9-559d-9380-de523a88c83c"
version = "1.0.10+0"

[[Functors]]
git-tree-sha1 = "e4768c3b7f597d5a352afa09874d16e3c3f6ead2"
uuid = "d9f16b24-f501-4c13-a1f2-28368ffc5196"
version = "0.2.7"

[[GLFW_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Libglvnd_jll", "Pkg", "Xorg_libXcursor_jll", "Xorg_libXi_jll", "Xorg_libXinerama_jll", "Xorg_libXrandr_jll"]
git-tree-sha1 = "0c603255764a1fa0b61752d2bec14cfbd18f7fe8"
uuid = "0656b61e-2033-5cc2-a64a-77c0f6c09b89"
version = "3.3.5+1"

[[GPUArrays]]
deps = ["Adapt", "LinearAlgebra", "Printf", "Random", "Serialization", "Statistics"]
git-tree-sha1 = "7772508f17f1d482fe0df72cabc5b55bec06bbe0"
uuid = "0c68f7d7-f131-5f86-a1c3-88cf8149b2d7"
version = "8.1.2"

[[GPUCompiler]]
deps = ["ExprTools", "InteractiveUtils", "LLVM", "Libdl", "Logging", "TimerOutputs", "UUIDs"]
git-tree-sha1 = "77d915a0af27d474f0aaf12fcd46c400a552e84c"
uuid = "61eb1bfa-7361-4325-ad38-22787b887f55"
version = "0.13.7"

[[GR]]
deps = ["Base64", "DelimitedFiles", "GR_jll", "HTTP", "JSON", "Libdl", "LinearAlgebra", "Pkg", "Printf", "Random", "Serialization", "Sockets", "Test", "UUIDs"]
git-tree-sha1 = "30f2b340c2fff8410d89bfcdc9c0a6dd661ac5f7"
uuid = "28b8d3ca-fb5f-59d9-8090-bfdbd6d07a71"
version = "0.62.1"

[[GR_jll]]
deps = ["Artifacts", "Bzip2_jll", "Cairo_jll", "FFMPEG_jll", "Fontconfig_jll", "GLFW_jll", "JLLWrappers", "JpegTurbo_jll", "Libdl", "Libtiff_jll", "Pixman_jll", "Pkg", "Qt5Base_jll", "Zlib_jll", "libpng_jll"]
git-tree-sha1 = "fd75fa3a2080109a2c0ec9864a6e14c60cca3866"
uuid = "d2c73de3-f751-5644-a686-071e5b155ba9"
version = "0.62.0+0"

[[GeometryBasics]]
deps = ["EarCut_jll", "IterTools", "LinearAlgebra", "StaticArrays", "StructArrays", "Tables"]
git-tree-sha1 = "58bcdf5ebc057b085e58d95c138725628dd7453c"
uuid = "5c1252a2-5f33-56bf-86c9-59e7332b4326"
version = "0.4.1"

[[Gettext_jll]]
deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Libiconv_jll", "Pkg", "XML2_jll"]
git-tree-sha1 = "9b02998aba7bf074d14de89f9d37ca24a1a0b046"
uuid = "78b55507-aeef-58d4-861c-77aaff3498b1"
version = "0.21.0+0"

[[Glib_jll]]
deps = ["Artifacts", "Gettext_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Libiconv_jll", "Libmount_jll", "PCRE_jll", "Pkg", "Zlib_jll"]
git-tree-sha1 = "7bf67e9a481712b3dbe9cb3dac852dc4b1162e02"
uuid = "7746bdde-850d-59dc-9ae8-88ece973131d"
version = "2.68.3+0"

[[Graphite2_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
git-tree-sha1 = "344bf40dcab1073aca04aa0df4fb092f920e4011"
uuid = "3b182d85-2403-5c21-9c21-1e1f0cc25472"
version = "1.3.14+0"

[[Grisu]]
git-tree-sha1 = "53bb909d1151e57e2484c3d1b53e19552b887fb2"
uuid = "42e2da0e-8278-4e71-bc24-59509adca0fe"
version = "1.0.2"

[[HTTP]]
deps = ["Base64", "Dates", "IniFile", "Logging", "MbedTLS", "NetworkOptions", "Sockets", "URIs"]
git-tree-sha1 = "14eece7a3308b4d8be910e265c724a6ba51a9798"
uuid = "cd3eb016-35fb-5094-929b-558a96fad6f3"
version = "0.9.16"

[[HarfBuzz_jll]]
deps = ["Artifacts", "Cairo_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "Graphite2_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Pkg"]
git-tree-sha1 = "8a954fed8ac097d5be04921d595f741115c1b2ad"
uuid = "2e76f6c2-a576-52d4-95c1-20adfe4de566"
version = "2.8.1+0"

[[Hyperscript]]
deps = ["Test"]
git-tree-sha1 = "8d511d5b81240fc8e6802386302675bdf47737b9"
uuid = "47d2ed2b-36de-50cf-bf87-49c2cf4b8b91"
version = "0.0.4"

[[HypertextLiteral]]
git-tree-sha1 = "5efcf53d798efede8fee5b2c8b09284be359bf24"
uuid = "ac1192a8-f4b3-4bfe-ba22-af5b92cd3ab2"
version = "0.9.2"

[[IOCapture]]
deps = ["Logging", "Random"]
git-tree-sha1 = "f7be53659ab06ddc986428d3a9dcc95f6fa6705a"
uuid = "b5f81e59-6552-4d32-b1f0-c071b021bf89"
version = "0.2.2"

[[IRTools]]
deps = ["InteractiveUtils", "MacroTools", "Test"]
git-tree-sha1 = "95215cd0076a150ef46ff7928892bc341864c73c"
uuid = "7869d1d1-7146-5819-86e3-90919afe41df"
version = "0.4.3"

[[IfElse]]
git-tree-sha1 = "debdd00ffef04665ccbb3e150747a77560e8fad1"
uuid = "615f187c-cbe4-4ef1-ba3b-2fcf58d6d173"
version = "0.1.1"

[[IniFile]]
deps = ["Test"]
git-tree-sha1 = "098e4d2c533924c921f9f9847274f2ad89e018b8"
uuid = "83e8ac13-25f8-5344-8a64-a9f2b223428f"
version = "0.5.0"

[[InteractiveUtils]]
deps = ["Markdown"]
uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240"

[[InverseFunctions]]
deps = ["Test"]
git-tree-sha1 = "f0c6489b12d28fb4c2103073ec7452f3423bd308"
uuid = "3587e190-3f89-42d0-90ee-14403ec27112"
version = "0.1.1"

[[IrrationalConstants]]
git-tree-sha1 = "7fd44fd4ff43fc60815f8e764c0f352b83c49151"
uuid = "92d709cd-6900-40b7-9082-c6be49f344b6"
version = "0.1.1"

[[IterTools]]
git-tree-sha1 = "05110a2ab1fc5f932622ffea2a003221f4782c18"
uuid = "c8e1da08-722c-5040-9ed9-7db0dc04731e"
version = "1.3.0"

[[IteratorInterfaceExtensions]]
git-tree-sha1 = "a3f24677c21f5bbe9d2a714f95dcd58337fb2856"
uuid = "82899510-4779-5014-852e-03e436cf321d"
version = "1.0.0"

[[JLLWrappers]]
deps = ["Preferences"]
git-tree-sha1 = "642a199af8b68253517b80bd3bfd17eb4e84df6e"
uuid = "692b3bcd-3c85-4b1f-b108-f13ce0eb3210"
version = "1.3.0"

[[JSON]]
deps = ["Dates", "Mmap", "Parsers", "Unicode"]
git-tree-sha1 = "8076680b162ada2a031f707ac7b4953e30667a37"
uuid = "682c06a0-de6a-54ab-a142-c8b1cf79cde6"
version = "0.21.2"

[[JpegTurbo_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
git-tree-sha1 = "d735490ac75c5cb9f1b00d8b5509c11984dc6943"
uuid = "aacddb02-875f-59d6-b918-886e6ef4fbf8"
version = "2.1.0+0"

[[Juno]]
deps = ["Base64", "Logging", "Media", "Profile"]
git-tree-sha1 = "07cb43290a840908a771552911a6274bc6c072c7"
uuid = "e5e0dc1b-0480-54bc-9374-aad01c23163d"
version = "0.8.4"

[[LAME_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
git-tree-sha1 = "f6250b16881adf048549549fba48b1161acdac8c"
uuid = "c1c5ebd0-6772-5130-a774-d5fcae4a789d"
version = "3.100.1+0"

[[LLVM]]
deps = ["CEnum", "LLVMExtra_jll", "Libdl", "Printf", "Unicode"]
git-tree-sha1 = "46092047ca4edc10720ecab437c42283cd7c44f3"
uuid = "929cbde3-209d-540e-8aea-75f648917ca0"
version = "4.6.0"

[[LLVMExtra_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
git-tree-sha1 = "6a2af408fe809c4f1a54d2b3f188fdd3698549d6"
uuid = "dad2f222-ce93-54a1-a47d-0025e8a3acab"
version = "0.0.11+0"

[[LZO_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
git-tree-sha1 = "e5b909bcf985c5e2605737d2ce278ed791b89be6"
uuid = "dd4b983a-f0e5-5f8d-a1b7-129d4a5fb1ac"
version = "2.10.1+0"

[[LaTeXStrings]]
git-tree-sha1 = "f2355693d6778a178ade15952b7ac47a4ff97996"
uuid = "b964fa9f-0449-5b57-a5c2-d3ea65f4040f"
version = "1.3.0"

[[Latexify]]
deps = ["Formatting", "InteractiveUtils", "LaTeXStrings", "MacroTools", "Markdown", "Printf", "Requires"]
git-tree-sha1 = "a8f4f279b6fa3c3c4f1adadd78a621b13a506bce"
uuid = "23fbe1c1-3f47-55db-b15f-69d7ec21a316"
version = "0.15.9"

[[LazyArtifacts]]
deps = ["Artifacts", "Pkg"]
uuid = "4af54fe1-eca0-43a8-85a7-787d91b784e3"

[[LibCURL]]
deps = ["LibCURL_jll", "MozillaCACerts_jll"]
uuid = "b27032c2-a3e7-50c8-80cd-2d36dbcbfd21"

[[LibCURL_jll]]
deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll", "Zlib_jll", "nghttp2_jll"]
uuid = "deac9b47-8bc7-5906-a0fe-35ac56dc84c0"

[[LibGit2]]
deps = ["Base64", "NetworkOptions", "Printf", "SHA"]
uuid = "76f85450-5226-5b5a-8eaa-529ad045b433"

[[LibSSH2_jll]]
deps = ["Artifacts", "Libdl", "MbedTLS_jll"]
uuid = "29816b5a-b9ab-546f-933c-edad1886dfa8"

[[Libdl]]
uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb"

[[Libffi_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
git-tree-sha1 = "761a393aeccd6aa92ec3515e428c26bf99575b3b"
uuid = "e9f186c6-92d2-5b65-8a66-fee21dc1b490"
version = "3.2.2+0"

[[Libgcrypt_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Libgpg_error_jll", "Pkg"]
git-tree-sha1 = "64613c82a59c120435c067c2b809fc61cf5166ae"
uuid = "d4300ac3-e22c-5743-9152-c294e39db1e4"
version = "1.8.7+0"

[[Libglvnd_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll", "Xorg_libXext_jll"]
git-tree-sha1 = "7739f837d6447403596a75d19ed01fd08d6f56bf"
uuid = "7e76a0d4-f3c7-5321-8279-8d96eeed0f29"
version = "1.3.0+3"

[[Libgpg_error_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
git-tree-sha1 = "c333716e46366857753e273ce6a69ee0945a6db9"
uuid = "7add5ba3-2f88-524e-9cd5-f83b8a55f7b8"
version = "1.42.0+0"

[[Libiconv_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
git-tree-sha1 = "42b62845d70a619f063a7da093d995ec8e15e778"
uuid = "94ce4f54-9a6c-5748-9c1c-f9c7231a4531"
version = "1.16.1+1"

[[Libmount_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
git-tree-sha1 = "9c30530bf0effd46e15e0fdcf2b8636e78cbbd73"
uuid = "4b2f31a3-9ecc-558c-b454-b3730dcb73e9"
version = "2.35.0+0"

[[Libtiff_jll]]
deps = ["Artifacts", "JLLWrappers", "JpegTurbo_jll", "Libdl", "Pkg", "Zlib_jll", "Zstd_jll"]
git-tree-sha1 = "340e257aada13f95f98ee352d316c3bed37c8ab9"
uuid = "89763e89-9b03-5906-acba-b20f662cd828"
version = "4.3.0+0"

[[Libuuid_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
git-tree-sha1 = "7f3efec06033682db852f8b3bc3c1d2b0a0ab066"
uuid = "38a345b3-de98-5d2b-a5d3-14cd9215e700"
version = "2.36.0+0"

[[LinearAlgebra]]
deps = ["Libdl"]
uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"

[[LogExpFunctions]]
deps = ["ChainRulesCore", "DocStringExtensions", "InverseFunctions", "IrrationalConstants", "LinearAlgebra"]
git-tree-sha1 = "6193c3815f13ba1b78a51ce391db8be016ae9214"
uuid = "2ab3a3ac-af41-5b50-aa03-7779005ae688"
version = "0.3.4"

[[Logging]]
uuid = "56ddb016-857b-54e1-b83d-db4d58db5568"

[[MacroTools]]
deps = ["Markdown", "Random"]
git-tree-sha1 = "3d3e902b31198a27340d0bf00d6ac452866021cf"
uuid = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09"
version = "0.5.9"

[[Markdown]]
deps = ["Base64"]
uuid = "d6f4376e-aef5-505a-96c1-9c027394607a"

[[MbedTLS]]
deps = ["Dates", "MbedTLS_jll", "Random", "Sockets"]
git-tree-sha1 = "1c38e51c3d08ef2278062ebceade0e46cefc96fe"
uuid = "739be429-bea8-5141-9913-cc70e7f3736d"
version = "1.0.3"

[[MbedTLS_jll]]
deps = ["Artifacts", "Libdl"]
uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1"

[[Measures]]
git-tree-sha1 = "e498ddeee6f9fdb4551ce855a46f54dbd900245f"
uuid = "442fdcdd-2543-5da2-b0f3-8c86c306513e"
version = "0.3.1"

[[Media]]
deps = ["MacroTools", "Test"]
git-tree-sha1 = "75a54abd10709c01f1b86b84ec225d26e840ed58"
uuid = "e89f7d12-3494-54d1-8411-f7d8b9ae1f27"
version = "0.5.0"

[[Missings]]
deps = ["DataAPI"]
git-tree-sha1 = "bf210ce90b6c9eed32d25dbcae1ebc565df2687f"
uuid = "e1d29d7a-bbdc-5cf2-9ac0-f12de2c33e28"
version = "1.0.2"

[[Mmap]]
uuid = "a63ad114-7e13-5084-954f-fe012c677804"

[[MozillaCACerts_jll]]
uuid = "14a3606d-f60d-562e-9121-12d972cd8159"

[[NNlib]]
deps = ["Adapt", "ChainRulesCore", "Compat", "LinearAlgebra", "Pkg", "Requires", "Statistics"]
git-tree-sha1 = "5203a4532ad28c44f82c76634ad621d7c90abcbd"
uuid = "872c559c-99b0-510c-b3b7-b6c96a88d5cd"
version = "0.7.29"

[[NNlibCUDA]]
deps = ["CUDA", "LinearAlgebra", "NNlib", "Random", "Statistics"]
git-tree-sha1 = "04490d5e7570c038b1cb0f5c3627597181cc15a9"
uuid = "a00861dc-f156-4864-bf3c-e6376f28a68d"
version = "0.1.9"

[[NaNMath]]
git-tree-sha1 = "bfe47e760d60b82b66b61d2d44128b62e3a369fb"
uuid = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3"
version = "0.3.5"

[[NetworkOptions]]
uuid = "ca575930-c2e3-43a9-ace4-1e988b2c1908"

[[Ogg_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
git-tree-sha1 = "7937eda4681660b4d6aeeecc2f7e1c81c8ee4e2f"
uuid = "e7412a2a-1a6e-54c0-be00-318e2571c051"
version = "1.3.5+0"

[[OpenLibm_jll]]
deps = ["Artifacts", "Libdl"]
uuid = "05823500-19ac-5b8b-9628-191a04bc5112"

[[OpenSSL_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
git-tree-sha1 = "15003dcb7d8db3c6c857fda14891a539a8f2705a"
uuid = "458c3c95-2e84-50aa-8efc-19380b2a3a95"
version = "1.1.10+0"

[[OpenSpecFun_jll]]
deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Pkg"]
git-tree-sha1 = "13652491f6856acfd2db29360e1bbcd4565d04f1"
uuid = "efe28fd5-8261-553b-a9e1-b2916fc3738e"
version = "0.5.5+0"

[[Opus_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
git-tree-sha1 = "51a08fb14ec28da2ec7a927c4337e4332c2a4720"
uuid = "91d4177d-7536-5919-b921-800302f37372"
version = "1.3.2+0"

[[OrderedCollections]]
git-tree-sha1 = "85f8e6578bf1f9ee0d11e7bb1b1456435479d47c"
uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d"
version = "1.4.1"

[[PCRE_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
git-tree-sha1 = "b2a7af664e098055a7529ad1a900ded962bca488"
uuid = "2f80f16e-611a-54ab-bc61-aa92de5b98fc"
version = "8.44.0+0"

[[Parsers]]
deps = ["Dates"]
git-tree-sha1 = "ae4bbcadb2906ccc085cf52ac286dc1377dceccc"
uuid = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0"
version = "2.1.2"

[[Pixman_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
git-tree-sha1 = "b4f5d02549a10e20780a24fce72bea96b6329e29"
uuid = "30392449-352a-5448-841d-b1acce4e97dc"
version = "0.40.1+0"

[[Pkg]]
deps = ["Artifacts", "Dates", "Downloads", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "REPL", "Random", "SHA", "Serialization", "TOML", "Tar", "UUIDs", "p7zip_jll"]
uuid = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f"

[[PlotThemes]]
deps = ["PlotUtils", "Requires", "Statistics"]
git-tree-sha1 = "a3a964ce9dc7898193536002a6dd892b1b5a6f1d"
uuid = "ccf2f8ad-2431-5c83-bf29-c5338b663b6a"
version = "2.0.1"

[[PlotUtils]]
deps = ["ColorSchemes", "Colors", "Dates", "Printf", "Random", "Reexport", "Statistics"]
git-tree-sha1 = "b084324b4af5a438cd63619fd006614b3b20b87b"
uuid = "995b91a9-d308-5afd-9ec6-746e21dbc043"
version = "1.0.15"

[[Plots]]
deps = ["Base64", "Contour", "Dates", "Downloads", "FFMPEG", "FixedPointNumbers", "GR", "GeometryBasics", "JSON", "Latexify", "LinearAlgebra", "Measures", "NaNMath", "PlotThemes", "PlotUtils", "Printf", "REPL", "Random", "RecipesBase", "RecipesPipeline", "Reexport", "Requires", "Scratch", "Showoff", "SparseArrays", "Statistics", "StatsBase", "UUIDs", "UnicodeFun"]
git-tree-sha1 = "0d185e8c33401084cab546a756b387b15f76720c"
uuid = "91a5bcdd-55d7-5caf-9e0b-520d859cae80"
version = "1.23.6"

[[PlutoUI]]
deps = ["AbstractPlutoDingetjes", "Base64", "Dates", "Hyperscript", "HypertextLiteral", "IOCapture", "InteractiveUtils", "JSON", "Logging", "Markdown", "Random", "Reexport", "UUIDs"]
git-tree-sha1 = "57312c7ecad39566319ccf5aa717a20788eb8c1f"
uuid = "7f904dfe-b85e-4ff6-b463-dae2292396a8"
version = "0.7.18"

[[Preferences]]
deps = ["TOML"]
git-tree-sha1 = "00cfd92944ca9c760982747e9a1d0d5d86ab1e5a"
uuid = "21216c6a-2e73-6563-6e65-726566657250"
version = "1.2.2"

[[Printf]]
deps = ["Unicode"]
uuid = "de0858da-6303-5e67-8744-51eddeeeb8d7"

[[Profile]]
deps = ["Printf"]
uuid = "9abbd945-dff8-562f-b5e8-e1ebf5ef1b79"

[[Qt5Base_jll]]
deps = ["Artifacts", "CompilerSupportLibraries_jll", "Fontconfig_jll", "Glib_jll", "JLLWrappers", "Libdl", "Libglvnd_jll", "OpenSSL_jll", "Pkg", "Xorg_libXext_jll", "Xorg_libxcb_jll", "Xorg_xcb_util_image_jll", "Xorg_xcb_util_keysyms_jll", "Xorg_xcb_util_renderutil_jll", "Xorg_xcb_util_wm_jll", "Zlib_jll", "xkbcommon_jll"]
git-tree-sha1 = "ad368663a5e20dbb8d6dc2fddeefe4dae0781ae8"
uuid = "ea2cea3b-5b76-57ae-a6ef-0a8af62496e1"
version = "5.15.3+0"

[[REPL]]
deps = ["InteractiveUtils", "Markdown", "Sockets", "Unicode"]
uuid = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb"

[[Random]]
deps = ["Serialization"]
uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c"

[[Random123]]
deps = ["Libdl", "Random", "RandomNumbers"]
git-tree-sha1 = "0e8b146557ad1c6deb1367655e052276690e71a3"
uuid = "74087812-796a-5b5d-8853-05524746bad3"
version = "1.4.2"

[[RandomNumbers]]
deps = ["Random", "Requires"]
git-tree-sha1 = "043da614cc7e95c703498a491e2c21f58a2b8111"
uuid = "e6cf234a-135c-5ec9-84dd-332b85af5143"
version = "1.5.3"

[[RealDot]]
deps = ["LinearAlgebra"]
git-tree-sha1 = "9f0a1b71baaf7650f4fa8a1d168c7fb6ee41f0c9"
uuid = "c1ae055f-0cd5-4b69-90a6-9a35b1a98df9"
version = "0.1.0"

[[RecipesBase]]
git-tree-sha1 = "44a75aa7a527910ee3d1751d1f0e4148698add9e"
uuid = "3cdcf5f2-1ef4-517c-9805-6587b60abb01"
version = "1.1.2"

[[RecipesPipeline]]
deps = ["Dates", "NaNMath", "PlotUtils", "RecipesBase"]
git-tree-sha1 = "7ad0dfa8d03b7bcf8c597f59f5292801730c55b8"
uuid = "01d81517-befc-4cb6-b9ec-a95719d0359c"
version = "0.4.1"

[[Reexport]]
git-tree-sha1 = "45e428421666073eab6f2da5c9d310d99bb12f9b"
uuid = "189a3867-3050-52da-a836-e630ba90ab69"
version = "1.2.2"

[[Requires]]
deps = ["UUIDs"]
git-tree-sha1 = "4036a3bd08ac7e968e27c203d45f5fff15020621"
uuid = "ae029012-a4dd-5104-9daa-d747884805df"
version = "1.1.3"

[[SHA]]
uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce"

[[Scratch]]
deps = ["Dates"]
git-tree-sha1 = "0b4b7f1393cff97c33891da2a0bf69c6ed241fda"
uuid = "6c6a2e73-6563-6170-7368-637461726353"
version = "1.1.0"

[[Serialization]]
uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b"

[[SharedArrays]]
deps = ["Distributed", "Mmap", "Random", "Serialization"]
uuid = "1a1011a3-84de-559e-8e89-a11a2f7dc383"

[[Showoff]]
deps = ["Dates", "Grisu"]
git-tree-sha1 = "91eddf657aca81df9ae6ceb20b959ae5653ad1de"
uuid = "992d4aef-0814-514b-bc4d-f2e9a6c4116f"
version = "1.0.3"

[[Sockets]]
uuid = "6462fe0b-24de-5631-8697-dd941f90decc"

[[SortingAlgorithms]]
deps = ["DataStructures"]
git-tree-sha1 = "b3363d7460f7d098ca0912c69b082f75625d7508"
uuid = "a2af1166-a08f-5f64-846c-94a0d3cef48c"
version = "1.0.1"

[[SparseArrays]]
deps = ["LinearAlgebra", "Random"]
uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf"

[[SpecialFunctions]]
deps = ["ChainRulesCore", "IrrationalConstants", "LogExpFunctions", "OpenLibm_jll", "OpenSpecFun_jll"]
git-tree-sha1 = "f0bccf98e16759818ffc5d97ac3ebf87eb950150"
uuid = "276daf66-3868-5448-9aa4-cd146d93841b"
version = "1.8.1"

[[Static]]
deps = ["IfElse"]
git-tree-sha1 = "e7bc80dc93f50857a5d1e3c8121495852f407e6a"
uuid = "aedffcd0-7271-4cad-89d0-dc628f76c6d3"
version = "0.4.0"

[[StaticArrays]]
deps = ["LinearAlgebra", "Random", "Statistics"]
git-tree-sha1 = "3c76dde64d03699e074ac02eb2e8ba8254d428da"
uuid = "90137ffa-7385-5640-81b9-e52037218182"
version = "1.2.13"

[[Statistics]]
deps = ["LinearAlgebra", "SparseArrays"]
uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2"

[[StatsAPI]]
git-tree-sha1 = "1958272568dc176a1d881acb797beb909c785510"
uuid = "82ae8749-77ed-4fe6-ae5f-f523153014b0"
version = "1.0.0"

[[StatsBase]]
deps = ["DataAPI", "DataStructures", "LinearAlgebra", "LogExpFunctions", "Missings", "Printf", "Random", "SortingAlgorithms", "SparseArrays", "Statistics", "StatsAPI"]
git-tree-sha1 = "eb35dcc66558b2dda84079b9a1be17557d32091a"
uuid = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91"
version = "0.33.12"

[[StructArrays]]
deps = ["Adapt", "DataAPI", "StaticArrays", "Tables"]
git-tree-sha1 = "2ce41e0d042c60ecd131e9fb7154a3bfadbf50d3"
uuid = "09ab397b-f2b6-538f-b94a-2f83cf4a842a"
version = "0.6.3"

[[TOML]]
deps = ["Dates"]
uuid = "fa267f1f-6049-4f14-aa54-33bafae1ed76"

[[TableTraits]]
deps = ["IteratorInterfaceExtensions"]
git-tree-sha1 = "c06b2f539df1c6efa794486abfb6ed2022561a39"
uuid = "3783bdb8-4a98-5b6b-af9a-565f29a5fe9c"
version = "1.0.1"

[[Tables]]
deps = ["DataAPI", "DataValueInterfaces", "IteratorInterfaceExtensions", "LinearAlgebra", "TableTraits", "Test"]
git-tree-sha1 = "fed34d0e71b91734bf0a7e10eb1bb05296ddbcd0"
uuid = "bd369af6-aec1-5ad0-b16a-f7cc5008161c"
version = "1.6.0"

[[Tar]]
deps = ["ArgTools", "SHA"]
uuid = "a4e569a6-e804-4fa4-b0f3-eef7a1d5b13e"

[[Test]]
deps = ["InteractiveUtils", "Logging", "Random", "Serialization"]
uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40"

[[TimerOutputs]]
deps = ["ExprTools", "Printf"]
git-tree-sha1 = "7cb456f358e8f9d102a8b25e8dfedf58fa5689bc"
uuid = "a759f4b9-e2f1-59dc-863e-4aeb61b1ea8f"
version = "0.5.13"

[[TranscodingStreams]]
deps = ["Random", "Test"]
git-tree-sha1 = "216b95ea110b5972db65aa90f88d8d89dcb8851c"
uuid = "3bb67fe8-82b1-5028-8e26-92a6c54297fa"
version = "0.9.6"

[[URIs]]
git-tree-sha1 = "97bbe755a53fe859669cd907f2d96aee8d2c1355"
uuid = "5c2747f8-b7ea-4ff2-ba2e-563bfd36b1d4"
version = "1.3.0"

[[UUIDs]]
deps = ["Random", "SHA"]
uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4"

[[Unicode]]
uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5"

[[UnicodeFun]]
deps = ["REPL"]
git-tree-sha1 = "53915e50200959667e78a92a418594b428dffddf"
uuid = "1cfade01-22cf-5700-b092-accc4b62d6e1"
version = "0.4.1"

[[Wayland_jll]]
deps = ["Artifacts", "Expat_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Pkg", "XML2_jll"]
git-tree-sha1 = "3e61f0b86f90dacb0bc0e73a0c5a83f6a8636e23"
uuid = "a2964d1f-97da-50d4-b82a-358c7fce9d89"
version = "1.19.0+0"

[[Wayland_protocols_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Wayland_jll"]
git-tree-sha1 = "2839f1c1296940218e35df0bbb220f2a79686670"
uuid = "2381bf8a-dfd0-557d-9999-79630e7b1b91"
version = "1.18.0+4"

[[XML2_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Libiconv_jll", "Pkg", "Zlib_jll"]
git-tree-sha1 = "1acf5bdf07aa0907e0a37d3718bb88d4b687b74a"
uuid = "02c8fc9c-b97f-50b9-bbe4-9be30ff0a78a"
version = "2.9.12+0"

[[XSLT_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Libgcrypt_jll", "Libgpg_error_jll", "Libiconv_jll", "Pkg", "XML2_jll", "Zlib_jll"]
git-tree-sha1 = "91844873c4085240b95e795f692c4cec4d805f8a"
uuid = "aed1982a-8fda-507f-9586-7b0439959a61"
version = "1.1.34+0"

[[Xorg_libX11_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libxcb_jll", "Xorg_xtrans_jll"]
git-tree-sha1 = "5be649d550f3f4b95308bf0183b82e2582876527"
uuid = "4f6342f7-b3d2-589e-9d20-edeb45f2b2bc"
version = "1.6.9+4"

[[Xorg_libXau_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
git-tree-sha1 = "4e490d5c960c314f33885790ed410ff3a94ce67e"
uuid = "0c0b7dd1-d40b-584c-a123-a41640f87eec"
version = "1.0.9+4"

[[Xorg_libXcursor_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libXfixes_jll", "Xorg_libXrender_jll"]
git-tree-sha1 = "12e0eb3bc634fa2080c1c37fccf56f7c22989afd"
uuid = "935fb764-8cf2-53bf-bb30-45bb1f8bf724"
version = "1.2.0+4"

[[Xorg_libXdmcp_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
git-tree-sha1 = "4fe47bd2247248125c428978740e18a681372dd4"
uuid = "a3789734-cfe1-5b06-b2d0-1dd0d9d62d05"
version = "1.1.3+4"

[[Xorg_libXext_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll"]
git-tree-sha1 = "b7c0aa8c376b31e4852b360222848637f481f8c3"
uuid = "1082639a-0dae-5f34-9b06-72781eeb8cb3"
version = "1.3.4+4"

[[Xorg_libXfixes_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll"]
git-tree-sha1 = "0e0dc7431e7a0587559f9294aeec269471c991a4"
uuid = "d091e8ba-531a-589c-9de9-94069b037ed8"
version = "5.0.3+4"

[[Xorg_libXi_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libXext_jll", "Xorg_libXfixes_jll"]
git-tree-sha1 = "89b52bc2160aadc84d707093930ef0bffa641246"
uuid = "a51aa0fd-4e3c-5386-b890-e753decda492"
version = "1.7.10+4"

[[Xorg_libXinerama_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libXext_jll"]
git-tree-sha1 = "26be8b1c342929259317d8b9f7b53bf2bb73b123"
uuid = "d1454406-59df-5ea1-beac-c340f2130bc3"
version = "1.1.4+4"

[[Xorg_libXrandr_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libXext_jll", "Xorg_libXrender_jll"]
git-tree-sha1 = "34cea83cb726fb58f325887bf0612c6b3fb17631"
uuid = "ec84b674-ba8e-5d96-8ba1-2a689ba10484"
version = "1.5.2+4"

[[Xorg_libXrender_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll"]
git-tree-sha1 = "19560f30fd49f4d4efbe7002a1037f8c43d43b96"
uuid = "ea2f1a96-1ddc-540d-b46f-429655e07cfa"
version = "0.9.10+4"

[[Xorg_libpthread_stubs_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
git-tree-sha1 = "6783737e45d3c59a4a4c4091f5f88cdcf0908cbb"
uuid = "14d82f49-176c-5ed1-bb49-ad3f5cbd8c74"
version = "0.1.0+3"

[[Xorg_libxcb_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "XSLT_jll", "Xorg_libXau_jll", "Xorg_libXdmcp_jll", "Xorg_libpthread_stubs_jll"]
git-tree-sha1 = "daf17f441228e7a3833846cd048892861cff16d6"
uuid = "c7cfdc94-dc32-55de-ac96-5a1b8d977c5b"
version = "1.13.0+3"

[[Xorg_libxkbfile_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll"]
git-tree-sha1 = "926af861744212db0eb001d9e40b5d16292080b2"
uuid = "cc61e674-0454-545c-8b26-ed2c68acab7a"
version = "1.1.0+4"

[[Xorg_xcb_util_image_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_xcb_util_jll"]
git-tree-sha1 = "0fab0a40349ba1cba2c1da699243396ff8e94b97"
uuid = "12413925-8142-5f55-bb0e-6d7ca50bb09b"
version = "0.4.0+1"

[[Xorg_xcb_util_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libxcb_jll"]
git-tree-sha1 = "e7fd7b2881fa2eaa72717420894d3938177862d1"
uuid = "2def613f-5ad1-5310-b15b-b15d46f528f5"
version = "0.4.0+1"

[[Xorg_xcb_util_keysyms_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_xcb_util_jll"]
git-tree-sha1 = "d1151e2c45a544f32441a567d1690e701ec89b00"
uuid = "975044d2-76e6-5fbe-bf08-97ce7c6574c7"
version = "0.4.0+1"

[[Xorg_xcb_util_renderutil_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_xcb_util_jll"]
git-tree-sha1 = "dfd7a8f38d4613b6a575253b3174dd991ca6183e"
uuid = "0d47668e-0667-5a69-a72c-f761630bfb7e"
version = "0.3.9+1"

[[Xorg_xcb_util_wm_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_xcb_util_jll"]
git-tree-sha1 = "e78d10aab01a4a154142c5006ed44fd9e8e31b67"
uuid = "c22f9ab0-d5fe-5066-847c-f4bb1cd4e361"
version = "0.4.1+1"

[[Xorg_xkbcomp_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libxkbfile_jll"]
git-tree-sha1 = "4bcbf660f6c2e714f87e960a171b119d06ee163b"
uuid = "35661453-b289-5fab-8a00-3d9160c6a3a4"
version = "1.4.2+4"

[[Xorg_xkeyboard_config_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_xkbcomp_jll"]
git-tree-sha1 = "5c8424f8a67c3f2209646d4425f3d415fee5931d"
uuid = "33bec58e-1273-512f-9401-5d533626f822"
version = "2.27.0+4"

[[Xorg_xtrans_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
git-tree-sha1 = "79c31e7844f6ecf779705fbc12146eb190b7d845"
uuid = "c5fb5394-a638-5e4d-96e5-b29de1b5cf10"
version = "1.4.0+3"

[[ZipFile]]
deps = ["Libdl", "Printf", "Zlib_jll"]
git-tree-sha1 = "3593e69e469d2111389a9bd06bac1f3d730ac6de"
uuid = "a5390f91-8eb1-5f08-bee0-b1d1ffed6cea"
version = "0.9.4"

[[Zlib_jll]]
deps = ["Libdl"]
uuid = "83775a58-1f1d-513f-b197-d71354ab007a"

[[Zstd_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
git-tree-sha1 = "cc4bf3fdde8b7e3e9fa0351bdeedba1cf3b7f6e6"
uuid = "3161d3a3-bdf6-5164-811a-617609db77b4"
version = "1.5.0+0"

[[Zygote]]
deps = ["AbstractFFTs", "ChainRules", "ChainRulesCore", "DiffRules", "Distributed", "FillArrays", "ForwardDiff", "IRTools", "InteractiveUtils", "LinearAlgebra", "MacroTools", "NaNMath", "Random", "Requires", "SpecialFunctions", "Statistics", "ZygoteRules"]
git-tree-sha1 = "2c30f2df0ba43c17e88c8b55b5b22c401f7cde4e"
uuid = "e88e6eb3-aa80-5325-afca-941959d7151f"
version = "0.6.30"

[[ZygoteRules]]
deps = ["MacroTools"]
git-tree-sha1 = "8c1a8e4dfacb1fd631745552c8db35d0deb09ea0"
uuid = "700de1a5-db45-46bc-99cf-38207098b444"
version = "0.2.2"

[[libass_jll]]
deps = ["Artifacts", "Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "HarfBuzz_jll", "JLLWrappers", "Libdl", "Pkg", "Zlib_jll"]
git-tree-sha1 = "5982a94fcba20f02f42ace44b9894ee2b140fe47"
uuid = "0ac62f75-1d6f-5e53-bd7c-93b484bb37c0"
version = "0.15.1+0"

[[libfdk_aac_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
git-tree-sha1 = "daacc84a041563f965be61859a36e17c4e4fcd55"
uuid = "f638f0a6-7fb0-5443-88ba-1cc74229b280"
version = "2.0.2+0"

[[libpng_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Zlib_jll"]
git-tree-sha1 = "94d180a6d2b5e55e447e2d27a29ed04fe79eb30c"
uuid = "b53b4c65-9356-5827-b1ea-8c7a1a84506f"
version = "1.6.38+0"

[[libvorbis_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Ogg_jll", "Pkg"]
git-tree-sha1 = "c45f4e40e7aafe9d086379e5578947ec8b95a8fb"
uuid = "f27f6e37-5d2b-51aa-960f-b287f2bc3b7a"
version = "1.3.7+0"

[[nghttp2_jll]]
deps = ["Artifacts", "Libdl"]
uuid = "8e850ede-7688-5339-a07c-302acd2aaf8d"

[[p7zip_jll]]
deps = ["Artifacts", "Libdl"]
uuid = "3f19e933-33d8-53b3-aaab-bd5110c3b7a0"

[[x264_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
git-tree-sha1 = "4fea590b89e6ec504593146bf8b988b2c00922b2"
uuid = "1270edf5-f2f9-52d2-97e9-ab00b5d0237a"
version = "2021.5.5+0"

[[x265_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
git-tree-sha1 = "ee567a171cce03570d77ad3a43e90218e38937a9"
uuid = "dfaa095f-4041-5dcd-9319-2fabd8486b76"
version = "3.5.0+0"

[[xkbcommon_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Wayland_jll", "Wayland_protocols_jll", "Xorg_libxcb_jll", "Xorg_xkeyboard_config_jll"]
git-tree-sha1 = "ece2350174195bb31de1a63bea3a41ae1aa593b6"
uuid = "d8fb68d0-12a3-5cfd-a85a-d49703b185fd"
version = "0.9.1+5"
"""

# ╔═╡ Cell order:
# ╠═0829eb90-1d74-46b6-80ec-482a2b71c6fe
# ╠═f360390b-1d15-4443-aad6-a5800a6ba776
# ╠═9a1ebef5-ed53-4e0b-89e7-20a20819b032
# ╠═eb25eb64-eb6c-48e0-8db6-d9705e397689
# ╠═fe446c7e-ed8c-4a0b-8bc9-024806f9f352
# ╟─66f0e667-d722-4e1e-807b-84a39cbc41b1
# ╠═9fa41b7c-1923-4c1e-bfc6-20ce4a1a2ede
# ╟─0d209540-29ad-4b2f-9e91-fac2bbee47ff
# ╠═5b45b29e-f0f4-41e9-91e7-d444687feb4e
# ╠═f8779824-9d59-4458-926f-10beb3cd3866
# ╠═152f3a3c-a565-41bb-8e59-6ab0d2315ffb
# ╠═25ac9438-2b1d-4f6b-9ff1-1695e1d52b51
# ╟─9b1c2f62-ec19-4667-8f93-f8b52750e317
# ╠═90446134-4e45-471c-857d-4e165e51937a
# ╠═6bf01e30-d054-4a98-9e0d-58d7da4e5524
# ╟─29ff1777-d276-4e8f-8582-4ca191f2e2ff
# ╠═f7aabe43-9a2c-4fe0-8099-c29cdf66566c
# ╠═d816b252-bdca-44ba-ac5c-cb21163a1e9a
# ╠═e4e2f50e-05fc-42da-a6d3-d62c4f901d84
# ╠═ae6681e0-c796-4145-a313-75f74b4993ad
# ╠═bbca5143-f314-40ea-a20e-8a043272e362
# ╠═340da189-f443-4376-a82d-7699a21ab7a2
# ╠═206ac4cc-5102-4381-ad8a-777b02dc4d5a
# ╠═eebb8706-a431-4fd1-b7a5-40f07a63d5cb
# ╠═b433a7ec-8264-48d6-8b95-53d2ec4bad05
# ╟─65e0b1fa-d5e1-4ff6-8736-c9d6b5f40150
# ╟─19ccfc3a-6dbb-4c64-bf03-e2e219ef0efe
# ╟─dc614254-c211-4552-b985-03020bfc5ab3
# ╟─128ab84e-9682-4c4e-a301-1e27d9c199a4
# ╠═aa079b60-af16-4824-8a1d-b0c68a0cacbc
# ╠═52eb1934-77b1-4da3-a36a-afb951f76784
# ╠═717a07a4-5254-40aa-8244-1a2010fedec8
# ╠═5946daa3-4608-43f3-8933-dd3eb3f4541c
# ╠═9d4a668a-23e3-4f36-86f4-60e242caee3b
# ╠═382b6dee-5fa7-4ca1-b804-4b50b0fb65a7
# ╠═dc855793-d234-4835-8674-bf56aa0ad0db
# ╠═f68e2322-937d-44ce-8aa9-757b27b00603
# ╠═cd55e232-493d-4849-8bd7-b0ba85e21bab
# ╠═176981f2-b7f5-4a0f-aae0-940e1db778c7
# ╠═08ef7fbf-005b-40b5-acde-f42750c04cd3
# ╠═1eae5450-f9ef-49ec-9dcd-48c025562ecf
# ╠═5abebc1a-370c-4f5f-8826-dc0b143d5166
# ╠═a20959be-65e4-4b69-9521-503bc59f0854
# ╠═6bf8d29a-7990-4e91-86e6-d9894ed3db27
# ╠═e6654ee2-776c-4b26-a5a3-324188062966
# ╠═2b115364-a8ce-4eb9-a324-7ac213061b83
# ╠═0679c91b-9824-4017-83fd-4001dc8c2d54
# ╠═943a2fb9-7d30-434d-ab1f-8a4b9b1af02b
# ╠═30417194-6cd1-4e10-9e25-1fa1c0761b9a
# ╠═7f42b201-01ec-4d63-b8de-92e735f28e4a
# ╟─baac6c78-e3cc-4b4f-8945-2bb4109f1489
# ╠═65cf41b8-adf4-42b9-82dc-d2fbafccda81
# ╠═ca1e02b6-8c78-4a94-8c7c-7d9ec6cffbca
# ╠═08820cf2-38cc-4451-9b6e-91475c396d6e
# ╠═188deb3a-18db-4d10-a4e8-89c6fd6e9302
# ╠═3b58537f-201b-4dc2-99e8-faabd9ce400f
# ╠═109519b1-096f-46a0-91a7-6f0e5508a947
# ╠═9ff075a3-cea6-466a-bc7d-ee2f85dc226e
# ╠═c85467b1-03f6-40da-8138-886245e1f29f
# ╠═4f87d6c3-ef9d-4930-9a6a-acaae31cbb82
# ╠═5c909bf7-9500-4ffa-a65d-91ddd155f675
# ╟─00000000-0000-0000-0000-000000000001
# ╟─00000000-0000-0000-0000-000000000002
