Exemplo n.º 1
0
        private static void OnDash(Obj_AI_Base sender, Dash.DashItem args)
        {
            var target = TargetSelector.GetTarget(spells[Spells.E].Range, TargetSelector.DamageType.Magical);
            if (!target.IsValidTarget())
            {
                return;
            }

            if (sender.IsMe && Orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.Combo)
            {
                SendTime = TickCount;

                //test

                if (IsListActive("Combo.Prio").SelectedIndex == 0 && spells[Spells.E].IsReady())
                {
                    spells[Spells.E].Cast(target);
                    Console.WriteLine("E Ondash cast");
                }

                if (IsListActive("Combo.Prio").SelectedIndex == 1 && spells[Spells.Q].IsReady()
                    && Player.Distance(target) < spells[Spells.Q].Range + 50)
                {
                    spells[Spells.Q].Cast();
                    Console.WriteLine("Q Ondash cast");
                }

                if (Vector3.Distance(Player.ServerPosition, target.ServerPosition) < spells[Spells.W].Range)
                {
                    UseHydra();
                }
            }
        }
Exemplo n.º 2
0
 private static void Ondash(Obj_AI_Base sender, Dash.DashItem args)
 {
     if (sender.IsMe)
     {
         passive = true;
     }
 }
Exemplo n.º 3
0
 private void Unit_OnDash(Obj_AI_Base sender, Dash.DashItem args)
 {
     if (sender.IsEnemy && sender is Obj_AI_Hero && config.Item("OnDash", true).GetValue<bool>() && E.IsReady() &&
         args.EndPos.Distance(player.Position) < E.Range)
     {
         CastE((Obj_AI_Hero) sender);
     }
 }
Exemplo n.º 4
0
 protected override void OnDash(Obj_AI_Base sender, Dash.DashItem args)
 {
     if (sender.IsMe)
     {
         DashEnd = args.EndPos.To3D();
         DashTime = myUtility.TickCount;
     }
 }
Exemplo n.º 5
0
 private void Unit_OnDash(Obj_AI_Base sender, Dash.DashItem args)
 {
     if (sender.IsEnemy && config.Item("useegc", true).GetValue<bool>() && sender is Obj_AI_Hero &&
         args.EndPos.Distance(player.Position) < E.Range && E.CanCast(sender))
     {
         Utility.DelayAction.Add(args.Duration, () => { E.Cast(args.EndPos); });
     }
 }
Exemplo n.º 6
0
 private static void Ondash(Obj_AI_Base sender, Dash.DashItem args)
 {
     if (sender.IsMe || sender.IsAlly) return;
     var endpos = args.EndPos;
     if (endpos.Distance(Player) < 300)
     {
         Q.Cast(endpos.Extend(Player.ServerPosition.To2D(), Q.Range));
     }
 }
Exemplo n.º 7
0
        static void Unit_OnDash(Obj_AI_Base sender, Dash.DashItem args)
        {
            var target = TargetSelector.GetTarget(E.Range * 2, DamageType.Magical);
            var PacketCast = getCheckBoxItem(SkyLv_Taric.Misc, "Taric.UsePacketCast");

            var td = sender as AIHeroClient;

            if (!td.IsEnemy || td == null || Player.IsRecalling())
            {
                return;
            }

            if (Orbwalker.ActiveModesFlags.HasFlag(Orbwalker.ActiveModes.Combo))
            {
                if (sender.NetworkId == target.NetworkId)
                {
                    if (getCheckBoxItem(SkyLv_Taric.Combo, "Taric.EOnDashendPosition") && E.IsReady() && Player.LSDistance(args.EndPos) < E.Range)
                    {
                        var delay = (int)(args.EndTick - Game.Time - E.Delay - 0.1f);
                        if (delay > 0)
                        {
                            LeagueSharp.Common.Utility.DelayAction.Add(delay * 1000, () => E.Cast(args.EndPos, PacketCast));
                        }
                        else
                        {
                            E.Cast(args.EndPos, PacketCast);
                        }
                    }
                }

                if (getCheckBoxItem(SkyLv_Taric.Combo, "Taric.UseEFromAlly") && E.IsReady() && Player.Mana >= E.ManaCost)
                {
                    foreach (var AllyHero in ObjectManager.Get<AIHeroClient>().Where(a => !a.IsMe && a.IsDead && a.Team == ObjectManager.Player.Team && Player.LSDistance(a) < 1600 && (a.HasBuff("TaricWAllyBuff") || a.HasBuff("TaricW"))))
                    {
                        var Allytarget = ObjectManager.Get<AIHeroClient>().Where(t => !t.IsDead && t.Team != ObjectManager.Player.Team && AllyHero.LSDistance(args.EndPos) < E.Range).FirstOrDefault();

                        if (sender.NetworkId == Allytarget.NetworkId)
                        {
                            if (getCheckBoxItem(SkyLv_Taric.Combo, AllyHero.NetworkId + "TargetDashEPEComboFromAlly"))
                            {
                                var delay = (int)(args.EndTick - Game.Time - E.Delay - 0.1f);
                                if (delay > 0)
                                {
                                    LeagueSharp.Common.Utility.DelayAction.Add(delay * 1000, () => E.Cast(args.EndPos, PacketCast));
                                }
                                else
                                {
                                    E.Cast(args.EndPos, PacketCast);
                                }
                            }
                        }
                    }
                }
            }
        }
Exemplo n.º 8
0
        protected override void OnDash(Obj_AI_Base sender, Dash.DashItem args)
        {
            if (sender.IsMe)
            {
                JumpStart = args.StartPos.To3D();
                JumpEnd = args.EndPos.To3D();
                //JumpTime = myUtility.TickCount;
                JumpTime = args.EndTick;

            }
        }
Exemplo n.º 9
0
        /// <summary>
        /// Dash type
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="args"></param>
        private static void Unit_OnDash(Obj_AI_Base sender, Dash.DashItem args)
        {
            var target = TargetSelector.GetTarget(Q.Range, TargetSelector.DamageType.Magical);

            if (!sender.IsEnemy)
                return;
            var delay = (int) (args.EndTick - Game.Time - E.Delay - 0.1f);
            if (target == null)
                return;
            if (delay > 0)
                E.Cast(args.EndPos);
        }
Exemplo n.º 10
0
        private void OnDash(Obj_AI_Base sender, Dash.DashItem args)
        {
 	         if (!sender.IsValidTarget())
             {
                  return;
             }

             if (!args.IsBlink && Variables.AssemblyMenu.GetItemValue<bool>("dzaio.champion.diana.extra.dashBlocker")
                        && spells[SpellSlot.E].IsReady() && spells[SpellSlot.E].Range >= ObjectManager.Player.Distance(sender))
             {
                  spells[SpellSlot.E].Cast();
             }
        }
Exemplo n.º 11
0
 private void Unit_OnDash(Obj_AI_Base sender, Dash.DashItem args)
 {
     if (sender.Distance(player.Position) > Q.Range || !Q.IsReady())
     {
         return;
     }
     if (orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.Combo && config.Item("useq", true).GetValue<bool>() &&
         args.EndPos.Distance(player.Position) > Q.Range &&
         args.EndPos.Distance(player) > args.StartPos.Distance(player))
     {
         Q.CastOnUnit(sender, config.Item("packets").GetValue<bool>());
     }
 }
Exemplo n.º 12
0
 private static void Unit_OnDash(Obj_AI_Base sender, Dash.DashItem args)
 {
     var caster = sender as AIHeroClient;
     if (caster == null || !caster.IsValid || caster.Team == Player.Team)
     {
         return;
     }
     // riven dash
     if (caster.ChampionName == "Riven" && getCheckBoxItem(evadeMenu, "Riven" + SpellSlot.Q))
     {
         RivenDashTick = Utils.GameTimeTickCount;
         RivenDashEnd = args.EndPos;
     }
 }
Exemplo n.º 13
0
        private static void Unit_OnDash(Obj_AI_Base sender, Dash.DashItem args)
        {
            if (sender.BadaoIsValidTarget() && sender.IsEnemy && sender is Obj_AI_Hero
                && BadaoPoppyHelper.UseWAutoAntiDash(sender as Obj_AI_Hero))
            {
                if (Geometry.Distance(ObjectManager.Player.Position.To2D(),args.StartPos, args.EndPos,true)
                    <= BadaoMainVariables.W.Range + sender.BoundingRadius
                    || args.StartPos.Distance(ObjectManager.Player.Position.To2D()) <= BadaoMainVariables.W.Range
                    || args.EndPos.Distance(ObjectManager.Player.Position.To2D()) <= BadaoMainVariables.W.Range)
                {
                    BadaoMainVariables.W.Cast();
                }

            }
        }
Exemplo n.º 14
0
        private static void OnDash(Obj_AI_Base sender, Dash.DashItem args)
        {
            var target = TargetSelector.GetTarget(spells[Spells.E].Range, TargetSelector.DamageType.Magical);
            if (!target.IsValidTarget())
            {
                return;
            }

            if (sender.IsMe)
            {
                if (IsListActive("Combo.Prio").SelectedIndex == 0 && spells[Spells.E].IsReady())
                {
                    spells[Spells.E].Cast(target);
                    Console.WriteLine("E Ondash cast");
                }
            }
        }
Exemplo n.º 15
0
        private static void Unit_OnDash(Obj_AI_Base sender, Dash.DashItem args)
        {
            var target = TargetSelector.GetTarget(Q.Range, TargetSelector.DamageType.Magical);
            var qSpell = Menu.Item("useEdashcloser").GetValue<bool>();

            if (!sender.IsEnemy)
            {
                return;
            }

            if (sender.NetworkId == target.NetworkId)
            {
                if (qSpell)
                {

                    if (Q.IsReady()
                        && args.EndPos.Distance(Player) < Q.Range)
                    {
                        var delay = (int)(args.EndTick - Game.Time - Q.Delay - 0.1f);
                        if (delay > 0)
                        {
                            Utility.DelayAction.Add(delay * 1000, () => Q.Cast(args.EndPos));
                        }
                        else
                        {
                            Q.Cast(args.EndPos);
                        }
                        if (Q.IsReady()
                            && args.EndPos.Distance(Player) < Q.Range)
                        {
                            if (delay > 0)
                            {
                                Utility.DelayAction.Add(delay * 1000, () => Q.Cast(args.EndPos));
                            }
                            else
                            {
                                E.Cast(args.EndPos);
                            }
                        }
                    }
                }
            }
        }
Exemplo n.º 16
0
        internal static void Unit_OnDash(Obj_AI_Base sender, Dash.DashItem args)
        {
            if (!Config.Item("useeflee").GetValue<bool>())
            {
                return;
            }

            var hero = sender as Obj_AI_Hero;
            if (hero != null && hero.IsEnemy && hero.Distance(args.EndPos) < KL.Player.Distance(args.EndPos))
            {
                if (hero.IsValidTarget(KL.Spellbook["E"].Range))
                {
                    if (KL.Spellbook["E"].IsReady())
                    {
                        KL.Spellbook["E"].Cast(args.EndPos);
                    }
                }
            }
        }
Exemplo n.º 17
0
        public static void Unit_OnDash(Obj_AI_Base sender, Dash.DashItem args)
        {
            if (!sender.IsMe)
                return;
            if (Variables.Orbwalker.ActiveMode != Orbwalking.OrbwalkingMode.Combo)
                return;

            var mode = Variables.ComboMode.GetValue<StringList>().SelectedValue;
            if (Helper.HasItem())
            {
                if (args.Duration - 100 - Game.Ping / 2 > 0)
                {
                    Utility.DelayAction.Add((args.EndTick - Environment.TickCount - Game.Ping - 150),() => Helper.CastItem());
                }
                else
                {
                    Helper.CastItem();
                }
            }

            if (Player.Mana < 4)
            {
                var targetE = TargetSelector.GetTarget(Variables.E.Range, TargetSelector.DamageType.Physical);
                if (Variables.E.IsReady() && targetE.IsValidTarget() && !targetE.IsZombie)
                {
                    Helper.CastE(targetE);
                }
            }
            if (mode == "E")
            {
                if (Player.Mana == 4)
                {
                    var targetE = TargetSelector.GetTarget(Variables.E.Range, TargetSelector.DamageType.Physical);
                    if (Variables.E.IsReady() && targetE.IsValidTarget() && !targetE.IsZombie)
                    {
                        Helper.CastE(targetE);
                    }
                }
            }

            //Game.Say("dash");
        }
Exemplo n.º 18
0
 private void Unit_OnDash(Obj_AI_Base sender, Dash.DashItem args)
 {
     if (sender.IsEnemy && sender is Obj_AI_Hero && config.Item("OnDash", true).GetValue<bool>() && E.IsReady() &&
         args.StartPos.Distance(player.Position) < E.Range)
     {
         E.CastOnUnit(sender, config.Item("packets").GetValue<bool>());
     }
     if (config.Item("GapCloser", true).GetValue<bool>() && sender.IsEnemy && sender is Obj_AI_Hero &&
         args.EndPos.Distance(player.Position) < E.Range && !forcedPos.IsValid())
     {
         forcedPos = args.StartPos.To3D();
         cgTarg = sender;
         Utility.DelayAction.Add(
             600, () =>
             {
                 forcedPos = Vector3.Zero;
                 E.CastOnUnit(
                     HeroManager.Enemies.FirstOrDefault(h => h.NetworkId == sender.NetworkId),
                     config.Item("packets").GetValue<bool>());
             });
     }
 }
Exemplo n.º 19
0
        private static void Unit_OnDash(Obj_AI_Base sender, Dash.DashItem args)
        {
            #region dash

            if (!getCheckBoxItem(miscMenu, "qwd"))
            {
                return;
            }

            var useQ = getCheckBoxItem(comboMenu, "UseQMini");
            var useQm = getCheckBoxItem(comboMenu, "UseQMega");
            var target = TargetSelector.GetTarget(GnarSpells.QMini.Range, DamageType.Magical);

            if (!sender.IsEnemy || sender == null)
            {
                return;
            }

            if (sender.NetworkId == target.NetworkId
                && Player.IsMiniGnar())
            {
                if (useQ
                    && GnarSpells.QMini.IsReady()
                    && args.EndPos.LSDistance(Player) <= GnarSpells.QMini.Range)
                {
                    var delay = (int) (args.EndTick - Game.Time - GnarSpells.QMini.Delay - 0.1f);
                    if (delay > 0)
                    {
                        Utility.DelayAction.Add(delay*1000, () => GnarSpells.QMini.Cast(args.EndPos));
                    }
                    else
                    {
                        GnarSpells.QMini.Cast(args.EndPos);
                    }
                }
                if (sender.NetworkId == target.NetworkId
                    && Player.IsMegaGnar())
                {
                    if (useQm
                        && GnarSpells.QMini.IsReady()
                        && args.EndPos.LSDistance(Player) <= GnarSpells.QMega.Range)
                    {
                        var delay = (int) (args.EndTick - Game.Time - GnarSpells.QMega.Delay - 0.1f);
                        if (delay > 0)
                        {
                            Utility.DelayAction.Add(delay*1000, () => GnarSpells.QMega.Cast(args.EndPos));
                        }
                        else
                        {
                            GnarSpells.QMega.Cast(args.EndPos);
                        }
                    }
                }
            }
        }
Exemplo n.º 20
0
        public static void Dash(Obj_AI_Base sender, Dash.DashItem args)
        {
            var useQ = _config.Item("UseQC").GetValue<bool>();
            var useW = _config.Item("UseWC").GetValue<bool>();
            var useE = _config.Item("UseEC").GetValue<bool>();
            var useEE = _config.Item("UseEEC").GetValue<bool>();
            var iYoumuu = _config.Item("Youmuu").GetValue<bool>();
            var iTiamat = _config.Item("Tiamat").GetValue<bool>();
            var iHydra = _config.Item("Hydra").GetValue<bool>();
            if (!sender.IsMe) return;
            if (Orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.Combo)
            {
                if (_player.Mana <= 4)
                {
                    if (useQ)
                    {
                        var tq = TargetSelector.GetTarget(_q.Range, TargetSelector.DamageType.Physical);
                        if (tq.IsValidTarget(_q.Range) && _q.IsReady()) _q.Cast();
                    }

                    var th = TargetSelector.GetTarget(_e.Range, TargetSelector.DamageType.Magical);

                    if (iTiamat && _tiamat.IsReady() && th.IsValidTarget(_tiamat.Range))
                    {
                        _tiamat.Cast();
                    }

                    if (iHydra && _hydra.IsReady() && th.IsValidTarget(_hydra.Range))
                    {
                        _hydra.Cast();
                    }

                    if (useE)
                    {
                        var te = TargetSelector.GetTarget(_e.Range, TargetSelector.DamageType.Physical);
                        var predE = _e.GetPrediction(te);
                        if (te.IsValidTarget(_e.Range) && _e.IsReady()
                            && predE.Hitchance >= Echange() && predE.CollisionObjects.Count == 0) _e.Cast(te);
                    }
                }

                if (_player.Mana == 5)
                {
                    var tq = TargetSelector.GetTarget(_q.Range, TargetSelector.DamageType.Physical);
                    if (useQ
                        && (_config.Item("ComboPrio").GetValue<StringList>().SelectedIndex == 0
                            || (_config.Item("ComboPrio").GetValue<StringList>().SelectedIndex == 2
                              && Orbwalking.InAutoAttackRange(tq)))) if (tq.IsValidTarget(_q.Range) && _q.IsReady()) _q.Cast();
                    var th = TargetSelector.GetTarget(_e.Range, TargetSelector.DamageType.Magical);

                    if (iTiamat && _tiamat.IsReady() && th.IsValidTarget(_tiamat.Range))
                    {
                        _tiamat.Cast();
                    }

                    if (iHydra && _hydra.IsReady() && th.IsValidTarget(_hydra.Range))
                    {
                        _hydra.Cast();
                    }

                    if (useE && _config.Item("ComboPrio").GetValue<StringList>().SelectedIndex == 2)
                    {
                        var te = TargetSelector.GetTarget(_e.Range, TargetSelector.DamageType.Physical);
                        var predE = _e.GetPrediction(te);
                        if (te.IsValidTarget(_e.Range) && _e.IsReady() && predE.Hitchance >= Echange()
                            && predE.CollisionObjects.Count == 0) _e.Cast(te);
                    }
                }
            }
        }
Exemplo n.º 21
0
 private void OnUnitDash(Obj_AI_Base sender, Dash.DashItem args)
 {
     try
     {
         var hero = sender as Obj_AI_Hero;
         if (!sender.IsEnemy || hero == null)
         {
             return;
         }
         if (HeroListManager.Check("w-gapcloser", hero))
         {
             if (args.EndPos.Distance(Player.Position) < W.Range)
             {
                 W.Cast(args.EndPos);
             }
         }
     }
     catch (Exception ex)
     {
         Global.Logger.AddItem(new LogItem(ex));
     }
 }
Exemplo n.º 22
0
 private static void onDash(Obj_AI_Base sender, Dash.DashItem args)
 {
     if (PortAIO.OrbwalkerManager.LastTarget() != null && sender.NetworkId == PortAIO.OrbwalkerManager.LastTarget().NetworkId &&
         MasterYi.Q.IsReady() && PortAIO.OrbwalkerManager.isComboActive
         && sender.LSDistance(MasterYi.player) <= 600)
         MasterYi.Q.Cast(sender);
 }
Exemplo n.º 23
0
        private static void Unit_OnDash(Obj_AI_Base sender, Dash.DashItem args)
        {
            #region dash

            var useQ = Config.Item("UseQMini").GetValue<bool>();
            var useQm = Config.Item("UseQMega").GetValue<bool>();
            var target = TargetSelector.GetTarget(GnarSpells.QMini.Range, TargetSelector.DamageType.Magical);

            if (!sender.IsEnemy)
            {
                return;
            }

            if (sender.NetworkId == target.NetworkId
                && Player.IsMiniGnar())
            {
                if (useQ
                    && GnarSpells.QMini.IsReady()
                    && args.EndPos.Distance(Player) <= GnarSpells.QMini.Range)
                {
                    var delay = (int) (args.EndTick - Game.Time - GnarSpells.QMini.Delay - 0.1f);
                    if (delay > 0)
                    {
                        Utility.DelayAction.Add(delay*1000, () => GnarSpells.QMini.Cast(args.EndPos));
                    }
                    else
                    {
                        GnarSpells.QMini.Cast(args.EndPos);
                    }
                }
                if (sender.NetworkId == target.NetworkId
                    && Player.IsMegaGnar())
                {
                    if (useQm
                        && GnarSpells.QMini.IsReady()
                        && args.EndPos.Distance(Player) <= GnarSpells.QMega.Range)
                    {
                        var delay = (int) (args.EndTick - Game.Time - GnarSpells.QMega.Delay - 0.1f);
                        if (delay > 0)
                        {
                            Utility.DelayAction.Add(delay*1000, () => GnarSpells.QMega.Cast(args.EndPos));
                        }
                        else
                        {
                            GnarSpells.QMega.Cast(args.EndPos);
                        }
                    }
                }
            }
        }
Exemplo n.º 24
0
 public static void TriggerOnDash(Obj_AI_Base sender, Dash.DashItem args)
 {
     OnDash(sender, args);
 }
Exemplo n.º 25
0
        private static void Unit_OnDash(Obj_AI_Base sender, Dash.DashItem args)
        {
            var target = TargetSelector.GetTarget(Q.Range, DamageType.Magical);

            if (!sender.IsEnemy)
                return;

            if (sender.NetworkId == target.NetworkId)
            {
                if (E.IsReady()
                   && E.IsInRange(sender.ServerPosition))
                {
                    E.Cast(Player.Position.LSExtend(sender.Position, 400));
                }
            }
        }
Exemplo n.º 26
0
 private void OnUnitDash(Obj_AI_Base sender, Dash.DashItem args)
 {
     try
     {
         var hero = sender as Obj_AI_Hero;
         if (!sender.IsEnemy || hero == null)
         {
             return;
         }
         if (HeroListManager.Check("q-gapcloser", hero) && Player.Distance(args.EndPos) <= Q.Range && Q.IsReady())
         {
             var target = TargetSelector.GetTarget(Q.Range * 0.85f, Q.DamageType);
             if (target == null || sender.NetworkId.Equals(target.NetworkId))
             {
                 Q.Cast(args.EndPos);
             }
         }
     }
     catch (Exception ex)
     {
         Global.Logger.AddItem(new LogItem(ex));
     }
 }
Exemplo n.º 27
0
 private void OnUnitDash(Obj_AI_Base sender, Dash.DashItem args)
 {
     try
     {
         var hero = sender as Obj_AI_Hero;
         if (!sender.IsEnemy || hero == null)
         {
             return;
         }
         var endTick = Game.Time - Game.Ping / 2000f + (args.EndPos.Distance(args.StartPos) / args.Speed);
         if (HeroListManager.Check("q-gapcloser", hero) && Ball.Position.Distance(args.EndPos.To3D()) <= Q.Range &&
             Q.IsReady())
         {
             var target = TargetSelector.GetTarget(Q.Range * 0.85f, Q.DamageType);
             if (target == null || sender.NetworkId.Equals(target.NetworkId))
             {
                 var delay = (int) (endTick - Game.Time - Q.Delay - 0.1f);
                 if (delay > 0)
                 {
                     Utility.DelayAction.Add(delay * 1000, () => Q.Cast(args.EndPos));
                 }
                 else
                 {
                     Q.Cast(args.EndPos);
                 }
             }
         }
     }
     catch (Exception ex)
     {
         Global.Logger.AddItem(new LogItem(ex));
     }
 }
Exemplo n.º 28
0
 private static void Unit_OnDash(Obj_AI_Base sender, Dash.DashItem args)
 {
     if (sender.IsMe)
     {
         ActiveModes.wallJumpInitTime = null;
         ActiveModes.wallJumpTarget = null;
     }
 }
 private static void OnUnitDash(Obj_AI_Base sender, Dash.DashItem args)
 {
     try
     {
         var hero = sender as Obj_AI_Hero;
         if (hero != null && hero.IsEnemy)
         {
             Utility.DelayAction.Add(
                 100,
                 delegate
                 {
                     Check(
                         true, hero, args.StartPos.To3D(), args.EndPos.To3D(), (args.EndTick / 1000f) - 0.1f,
                         false);
                 });
         }
     }
     catch (Exception ex)
     {
         Global.Logger.AddItem(new LogItem(ex));
     }
 }
Exemplo n.º 30
0
 /// <summary>
 ///     The OnDash event
 /// </summary>
 /// <param name="sender">The sender.</param>
 /// <param name="args">The args.</param>
 protected virtual void Unit_OnDash(Obj_AI_Base sender, Dash.DashItem args)
 {
     //
 }